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

の場合let type = typesField.itemListUI { - > this one – Latenec

+0

は 'if let'を右側に使用するたびに**オプションの**(値を持つ場合もありません)でなければなりません。詳細は[こちら](https://stackoverflow.com/questions/24018327/what-does-an-exclamation-mark-mean-in-the-swift-language/38830543#38830543)をご覧ください。 **非選択肢**は 'nil'ではないかもしれませんので*確かに*値を持っています。あなたの場合、値*は 'string'であり' string 'ではありません。あなたは '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 
} 

だけではありませんif let

item.type = typesField.itemListUI 

、余分なローカル変数を記述します。

+0

私はこれを得ていますエラー - タイプ '[String]'の値を 'String'に割り当てることはできません – Latenec

+0

明らかに、 'item.type'は' String'( '[String]')の配列ではなく(単一の) 'String'として宣言されています。これを設計で解決しなければなりません。 – vadian

+0

さて、助けてくれてありがとう! @vadian – Latenec

関連する問題