35
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-06-09

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

35
33
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?