无法在关闭中找到成员

Byt*_*Guy 9 ios swift

我有以下代码.prompt是一个UIAlertController.

self.presentViewController(prompt, animated: true, completion: {
     prompt.textFields[0].becomeFirstResponder()
})
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:Could not find member 'becomeFirstResponder'.

然而,如果我把它放在它的工作正常:

self.presentViewController(prompt, animated: true, completion: {
     let foo = 0
     prompt.textFields[0].becomeFirstResponder()
})
Run Code Online (Sandbox Code Playgroud)

当我添加如上所述的无用代码行时,为什么错误会消失?

joh*_*lem 1

根据《Swift 编程语言》一书有关 If 语句和强制展开的部分,

\n\n
\n

\xe2\x80\x9c您可以使用 if 语句来查明可选值是否包含值。如果可选值确实有值,则其计算结果为 true;如果它根本没有值,则计算结果为 false。\n 一旦您\xe2\x80\x99 确定可选值确实包含值,您就可以访问其基础值\xe2\x80\x9d

\n
\n\n

UIAlertController 不必具有 textFields,因此由于textFields数组是可选的,因此您必须先将其解包,然后才能调用数组内部对象上的函数,因此它应该如下所示:

\n\n
self.presentViewController(prompt, animated: true, completion: {\n    if let textFields = prompt.textFields {\n       textFields[0].becomeFirstResponder()\n    }\n})\n
Run Code Online (Sandbox Code Playgroud)\n