绑定必须有可选类型斯威夫特3错误
问题描述:
我很感兴趣,为什么我得到这个错误:绑定必须有可选类型斯威夫特3错误
Initializer for conditional binding must have Optional type, not [String]
这里是我的代码:
class MainVC: UIViewController {
@IBOutlet weak var typesField: IQDropDownTextField!
override func viewDidLoad() {
super.viewDidLoad()
let elements: Array<String?> = ["Electronics", "Cars", "Toys"]
typesField.isOptionalDropDown = false
typesField.itemList = (elements as? [String])!
}
@IBAction func savePressed(_ sender: UIButton) {
var item: Item!
if let types = typesField.itemListUI {
item.type = types
}
}
}
答
Initializer for conditional binding must have Optional type, not [String]
指的右侧表达式(typesField.itemListUI
)不是可选的,并且不需要可选的绑定
因此改为
if let types = typesField.itemListUI {
item.type = types
}
只写
item.type = typesField.itemListUI
没有if let
,没有多余的局部变量。
究竟哪一行确实会导致错误? – rmaddy
if let types = typesField.itemListUI { - >这个 – Latenec
每当你使用'if let'右边*必须*是**可选**(可能有或没有值)。有关更多信息,请参见[这里](https://*.com/questions/24018327/what-does-an-exclamation-mark-mean-in-the-swift-language/38830543#38830543)。 **非可选项**可能永远不会'无'所以*肯定*它有一个值;在你的情况下,值*是*字符串,而不是'字符串?'。你可以把这行写成'types = typesField.itemListUI',而不用'if let'。 – Honey