2017-07-15 300 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