请帮助我理解这些代码行

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 文章。