生活随笔
收集整理的這篇文章主要介紹了
IOS之Swift5.x开发通讯录实战
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
IOS之Swift5.x開發(fā)通訊錄實(shí)戰(zhàn)
swift基礎(chǔ)知識(shí)的使用。
閉包,連線 ,強(qiáng)制解包 頁面的傳值,模型的構(gòu)建、自定義Cell等知識(shí)的使用。
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))" }}
import UIKitclass ViewController: UITableViewController {private var persons
: [LJPerson]?override func viewDidLoad() {super.viewDidLoad()print("---")self.loadData
{ (array
) inself.persons
= array
self.tableView
.reloadData()}}override func prepare(for segue
: UIStoryboardSegue, sender
: Any?) {guard let detailVC
= segue
.destination
as? DetailViewController else {return}guard let indexPath
= tableView
.indexPathForSelectedRow
else {return}print(persons
![indexPath
.row
])detailVC
.person
= persons
![indexPath
.row
]detailVC
.didSaveCallBack
= self.tableView
.reloadData
}}
extension ViewController {override func tableView(_ tableView
: UITableView, cellForRowAt indexPath
: IndexPath) -> UITableViewCell {let cell
= tableView
.dequeueReusableCell(withIdentifier
: "Cell", for: indexPath
) as! PersonCellcell
.person
= persons
![indexPath
.row
]return cell
}override func tableView(_ tableView
: UITableView, numberOfRowsInSection section
: Int) -> Int {return persons
?.count ?? 0}
}
extension ViewController {private func loadData(completion
: @escaping
(_ array
: [LJPerson]) -> ()){let globalQueue
= DispatchQueue.global()globalQueue
.async
{print("耗時(shí)操作")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
))}DispatchQueue.main
.async
{print("完成回調(diào)")completion(dataList
)}}}}
import UIKitclass PersonCell: UITableViewCell {var person
: LJPerson? {didSet{nameLabel
.text
= person
?.nameageLabel
.text
= "\(person?.age ?? 0)"}}@IBOutlet weak var nameLabel
: UILabel!@IBOutlet weak var ageLabel
: UILabel!
}
import UIKitclass DetailViewController: UIViewController {var didSaveCallBack
: (() -> ())?var person
: LJPerson?
@IBOutlet weak var nameText
: UITextField!@IBOutlet weak var ageText
: UITextField!@IBAction func save(_ sender
: Any) {person
?.name
=nameText
.textperson
?.age
=Int(ageText
.text
!) ?? 0print(person
)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()}
}
總結(jié)
以上是生活随笔為你收集整理的IOS之Swift5.x开发通讯录实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。