2017-07-15 126 views
2

我很感兴趣,为什么我得到这个错误:绑定必须有可选类型斯威夫特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 
     } 
    } 
} 
+0

究竟哪一行确实会导致错误? – rmaddy

+0

if let types = typesField.itemListUI { - >这个 – Latenec

+0

每当你使用'if let'右边*必须*是**可选**(可能有或没有值)。有关更多信息,请参见[这里](https://stackoverflow.com/questions/24018327/what-does-an-exclamation-mark-mean-in-the-swift-language/38830543#38830543)。 **非可选项**可能永远不会'无'所以*肯定*它有一个值;在你的情况下,值*是*字符串,而不是'字符串?'。你可以把这行写成'types = typesField.itemListUI',而不用'if let'。 – Honey

回答

0

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,没有多余的局部变量。

+0

我得到这个错误 - 无法指定类型'[String]'的值来键入'String?' – Latenec

+0

显然'item.type'被声明为(single)'String'而不是'String'的数组('[String]')。你必须在你的设计中解决这个问题。 – vadian

+0

好的,谢谢你的帮助! @vadian – Latenec