2016-12-15 13 views
0

iOSアプリケーションをSwift 3.0に移行するプロセスについてここに私が直面している1つの問題があります。タイプ '[XYZ]!'サブスクリプトメンバーがありません

まず、関連するコード:

struct OnlineBox { 
    var vf1,vf2:CGFloat! 
    var vs1:String! 
} 

var myOnlineInfo:[OnlineBox]! 

func doSomeWork() { 
    myOnlineInfo = [OnlineBox](repeating: OnlineBox(vf1: 0.0, vf2: 0.0, vs1: ""), count: 11) 

    // below someInfoArray comes from querying a Core Data Entity: 
    for item in someInfoArray { 
     myOnlineInfo[(item.valueForKey("keyOne") as! Int) - 1].vf1 = item.valueForKey("vf1") as! CGFloat 
     myOnlineInfo[(item.valueForKey("keyOne") as! Int) - 1].vf2 = item.valueForKey("vf2") as! CGFloat 
     myOnlineInfo[(item.valueForKey("keyOne") as! Int) - 1].vs1 = item.valueForKey("vs1") as! String 
    } 
} 

第二の問題:

私はループ内の3行のために、この神秘的なエラーメッセージを取得しています:つまり

Type '[OnlineBox]!' has no subscript members 

配列には添え字メンバーはありません。私はそれを得ていない。

どのようにコードを変更する必要がありますか?

+0

はあなたsomeInfoArrayを表示します。 '["" keyOne ":1、" vf1 ":0.0 ...]、[" keyOne ":2、" vf1 ":0.0] ...]のようなものですか? – Satachito

+0

私はsomeInfoArrayを表示できますが、 "(item.valueForKey(" keyOne ")!Int)はIntでなければなりません。残りは重要ではありません。私が間違っている? – Michel

+0

someInfoArrayがどこから来るかを確認できるようになりました。 – Michel

答えて

0

someInfoArrayが辞書の配列であると仮定します。

'item'は、valueForKeyメソッドに応答しないディクショナリのインスタンスになりました。

したがって、valueForKeyに応答するにはNSDictionaryにキャストします。

for item in someInfoArray { 
    let i = item as NSDictionary 
    myOnlineInfo[(i.valueForKey("keyOne") as! Int) - 1].vf1 = i.valueForKey("vf1") as! CGFloat 
    myOnlineInfo[(i.valueForKey("keyOne") as! Int) - 1].vf2 = i.valueForKey("vf2") as! CGFloat 
    myOnlineInfo[(i.valueForKey("keyOne") as! Int) - 1].vs1 = i.valueForKey("vs1") as! String 
} 

または単に、

for item in someInfoArray { 
    myOnlineInfo[(item["keyOne"] as! Int) - 1].vf1 = item["vf1"] as! CGFloat 
    myOnlineInfo[(item["keyOne"] as! Int) - 1].vf2 = item["vf2"] as! CGFloat 
    myOnlineInfo[(item["keyOne"] as! Int) - 1].vs1 = item["vs1"] as! String 
} 
+0

この回答は私を正しい軌道に乗せてくれました。私はまだエラーメッセージが適切だとは思わない。下付き文字として提供しているものが正しいタイプではないことを明確に伝える必要があります。 – Michel

+0

私は、エラーメッセージが真実を伝えていないことに同意します。バグレポートをappleに報告してください。 – Satachito

関連する問題