iOS
Swift

Swiftでは配列の型が確定しないとfor inは扱えない(気がする)

More than 3 years have passed since last update.

Swiftでは配列に型を指定できるようになっていて、for in文によるループも使えるようなのですが、通信結果のデータをJSONObjectにしたものなど、型をコーディング時に指定できない配列は一度配列自体を特定の型の配列かどうかOptional Bindingで判定しなければいけないようです。

(ベータでない正式なSDKがダウンロードできるようになってから試さなければ内容に正確性はないので、正式なSDKが出てから試したい内容です)

コード例:

//通信結果などのデータでArrayの要素が混在する可能性がある場合

var array : AnyObject[] = ["abc", 1]

//Optional Bindingで全ての要素が特定のObjectかどうかを判定
if let downCastArray = array as? String[] {
//全ての要素がString確定
for object : String in downCastArray {
println(object.uppercaseString)
}
}

ちなみにループを回し要素ごとに値をチェックしたいなら、オーソドックスにfor文を使い要素ごとにOptional Bindingを使うという手はあると思います。

//要素ごとに判定しなければいけないならfor in文は使えなさそう

for (var i = 0; i < array.count; i++) {
//要素ごとに確定させていく
if let string = array[i] as? String {
println(array[i].uppercaseString)
}
}


参考:

[Apple公式]Using Swift with Cocoa and Objective-C :Working with Cocoa Data Types

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html