日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS之Swift5.x开发通讯录实战

發布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS之Swift5.x开发通讯录实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IOS之Swift5.x開發通訊錄實戰

swift基礎知識的使用。
閉包,連線 ,強制解包 頁面的傳值,模型的構建、自定義Cell等知識的使用。

// // LJPerson.swift // 03-Swift通訊錄實戰 // // Created by 魯軍 on 2021/3/12. //import UIKitclass LJPerson: NSObject {@objc var name: String?@objc var age: Int = 0init(dict : [String : Any]) {super.init()setValuesForKeys(dict)}override var description: String{let keys = ["name","age"]return "\(dictionaryWithValues(forKeys: keys))" //字典轉 字符串 用\() 外面加雙引號拼接一下}} // // ViewController.swift // 04-Swift通訊錄實戰自定義Cell // // Created by 魯軍 on 2021/3/12. //import UIKitclass ViewController: UITableViewController {private var persons : [LJPerson]?override func viewDidLoad() {super.viewDidLoad()print("---")// self.loadData()self.loadData { (array) in// print(array)//記錄接收到的回調參數self.persons = array//刷新表格self.tableView.reloadData()}}override func prepare(for segue: UIStoryboardSegue, sender: Any?) {//1 拿到目標控制器guard let detailVC = segue.destination as? DetailViewController else {return}//2 獲取用戶當前選中行guard let indexPath = tableView.indexPathForSelectedRow else {return}//3.根據indexPath獲取person數據print(persons![indexPath.row])//4傳遞數據// 1 個人記錄detailVC.person = persons![indexPath.row]//2 完成回調/*detailVC.didSaveCallBack = { ()->() inself.tableView.reloadData()}*///簡寫 傳遞了一個可以執行的函數detailVC.didSaveCallBack = self.tableView.reloadData}}//MARK: - 數據源方法 extension ViewController {override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {//模型查詢可重用cell 返回UITableCell 沒有personCellde 的屬性//使用 as轉換類型 需要使用 ?/ ! => 根據前面函數的返回值來決定let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! PersonCell//為什么可以強制解包。 原因。 只有有數據 ,才會調用這個數據源方法//persons一定有內容的cell.person = persons![indexPath.row]return cell}override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {//如果persons 數組為nil 直接返回0/* if persons == nil {return 0}else{//強制解包return persons!.count}*///persons是可選的 可能為空 所以 加個 ?? 0 如果persons 數組為nil 直接返回0 ?? 是操作符return persons?.count ?? 0} }//extension 類似OC的分類??梢詫⒖刂破鞯拇a分組。便于維護和管理 //MARK: - 數據處理 extension ViewController {private func loadData(completion : @escaping (_ array : [LJPerson]) -> ()){//dispatch_asynclet globalQueue = DispatchQueue.global()globalQueue.async {print("耗時操作")//創建數組var dataList = [LJPerson]()for i in 0..<50{let name = "小花 \(i)"let age = arc4random_uniform(10) % 20 + 10let dict : [String : Any] = ["name" : name,"age" : age]dataList.append(LJPerson(dict: dict))}//測試數據`//print(dataList)DispatchQueue.main.async {//操作完成的回調print("完成回調")completion(dataList)}}}} // // PersonCell.swift // 04-Swift通訊錄實戰自定義Cell // // Created by 魯軍 on 2021/3/12. //import UIKitclass PersonCell: UITableViewCell {//個人模型 swift 中設置模型可以用 didSetvar person : LJPerson? {//可選的didSet{// 不需要使用` _成員變量=變量 ` 因為已經完成了設置了//當person模型設置值完成后。執行的代碼nameLabel.text = person?.nameageLabel.text = "\(person?.age ?? 0)"}}@IBOutlet weak var nameLabel: UILabel!@IBOutlet weak var ageLabel: UILabel! } // // DetailViewController.swift // 04-Swift通訊錄實戰自定義Cell // // Created by 魯軍 on 2021/3/12. //import UIKitclass DetailViewController: UIViewController {//定義閉包屬性var didSaveCallBack: (() -> ())?//個人數據模型var person : LJPerson?//{ // didSet{ // //在傳遞的時候??刂破饕呀洷粍摻ā5强刂破鞯囊晥D沒有被創建 // //視圖沒有被創建 那么子視圖同樣沒有創建 // //EXC_BAD_INSTRANCE 野指針 // //一旦使用了view 如果view 為nil 會調用loadView() 創建view 以及子視圖 // nameText.text = person?.name // ageText.text = "\(person?.age ?? 0)" // // } // }@IBOutlet weak var nameText: UITextField!@IBOutlet weak var ageText: UITextField!@IBAction func save(_ sender: Any) {//1使用UI更新模型person?.name=nameText.text//第一個 ! 保證字符串一定有內容//第二個 ! 保證一定能夠轉成整數//person?.age=Int(ageText.text!)!person?.age=Int(ageText.text!) ?? 0print(person)//2完成回調。 通知控制器刷新數據 !閉包// ? 表示如果閉包不存在 就不執行。-》 OC 中調用block 一定要判斷//如果強行解包 同時沒有設置數值 會崩潰didSaveCallBack?()//關閉控制器navigationController?.popViewController(animated: true)}@IBAction func textChange() {//兩個框子都有值 按鈕才能高亮保存按鈕navigationItem.rightBarButtonItem?.isEnabled = nameText.hasText && ageText.hasText}override func viewDidLoad() {super.viewDidLoad()nameText.text = person?.nameageText.text = "\(person?.age ?? 0)"//激活按鈕self.textChange()}/*// MARK: - Navigation*/ }

總結

以上是生活随笔為你收集整理的IOS之Swift5.x开发通讯录实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。