请帮助我理解这些代码行
Please help me understand these lines of code
@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,
我会按以下方式编写代码:
@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()
}
我的代码有什么问题?
在这种情况下,[unowned self] action in
和下面的 guard let
代码有什么用?
剂量 alert.textFields?.first
是什么意思?
saveAction
的末尾有一个闭包块,这基本上是触发保存操作时会发生的情况。在闭包内部,您需要使用 self
来引用变量。当您使用 self
时,它会创建闭包的强引用。 [unowned self]
基本上意味着告诉不要用闭包创建强引用。
对于下一部分,guard
关键字用于确保值不为零。这里,alert.textFields?.first
是一个可选的文本字段。因此,如果您执行 alert.textFields!.first!.text!
并且 textField 结果为 nil,您的应用程序将会崩溃。为了防止这种情况,使用了 guard
关键字。如果其中的值是 nil
,控件将进入 else
块并 return 跳过所有下面的代码。
如果您想阅读有关强引用和弱引用的更多信息,请查看 this 文章。
@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,
我会按以下方式编写代码:
@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()
}
我的代码有什么问题?
在这种情况下,[unowned self] action in
和下面的 guard let
代码有什么用?
剂量 alert.textFields?.first
是什么意思?
saveAction
的末尾有一个闭包块,这基本上是触发保存操作时会发生的情况。在闭包内部,您需要使用 self
来引用变量。当您使用 self
时,它会创建闭包的强引用。 [unowned self]
基本上意味着告诉不要用闭包创建强引用。
对于下一部分,guard
关键字用于确保值不为零。这里,alert.textFields?.first
是一个可选的文本字段。因此,如果您执行 alert.textFields!.first!.text!
并且 textField 结果为 nil,您的应用程序将会崩溃。为了防止这种情况,使用了 guard
关键字。如果其中的值是 nil
,控件将进入 else
块并 return 跳过所有下面的代码。
如果您想阅读有关强引用和弱引用的更多信息,请查看 this 文章。