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()
 }