Ios 请帮我理解这些代码行
我能理解代码的大部分内容,除了以下几行:Ios 请帮我理解这些代码行,ios,swift,uialertcontroller,Ios,Swift,Uialertcontroller,我能理解代码的大部分内容,除了以下几行: @IBAction func addName(_ sender: AnyObject) { let alert = UIAlertController(title: "New Name", message: "Add a new name", preferredStyle: .alert) let saveAction = UIAlertAction(title: "Save", style: .default) {
@IBAction func addName(_ sender: AnyObject) {
let alert = UIAlertController(title: "New Name", message: "Add a new name", preferredStyle: .alert)
let saveAction = UIAlertAction(title: "Save", style: .default) {
[unowned self] action in
guard let textField = alert.textFields?.first,
let nameToSave = textField.text else {
return
}
self.names.append(nameToSave)
self.tableView.reloadData()
}
我将用以下方式编写代码:
[unowned self] action in
guard let textField = alert.textFields?.first,
我的代码怎么了?
在这种情况下,[unowned self]动作和下面的guard-let代码有什么用?
什么剂量alert.textFields?first Means?saveAction的末尾有一个闭合块,这基本上就是触发save action时会发生的情况。在闭包内部,您需要使用self引用变量。当您使用self时,它会创建一个带有闭包的强引用。[unowned self]的基本意思是告诉您不要使用闭包创建强引用
对于下一部分,将使用guard关键字来确保值不是nil。这里是alert.textFields?。第一个是可选的textfield。所以,如果您执行alert.textFields!。第一文本如果文本字段为零,则应用程序将崩溃。为了防止这种情况,使用了guard关键字。如果其中的值为nil,则控件将进入else块并返回跳过以下所有代码的结果
如果您想阅读更多关于强引用和弱引用的内容,请阅读这篇文章。您所问的是两行完全独立的代码,而不是一行。这两个人没有任何关系。请参考此答案
@IBAction func addName(_ sender: AnyObject) {
let alert = UIAlertController(title: "New Name", message: "Add a new name", preferredStyle: .alert)
let saveAction = UIAlertAction(title: "Save", style: .default) {
let nameToSave = textField.text
self.names.append(nameToSave)
self.tableView.reloadData()
}