SwiftでNSArrayをキャストするときは、中にあるクラスをチェックしておく。

SwiftとObjective-Cのクラスは、相互にキャストできるものがあります。
Objective-Cのクラスにあるメソッドを使いたい時などに、キャストすることも結構あります。
もともとObjective-Cで書いていたアプリを引き続きSwiftで開発するときなども、キャストする場面にあたります。

しかし、スムーズにいかないこともあります。
配列を操作するときに何度か問題が起きたので、備忘録としてぼくの注意点と対処方を記事にしておきます。

SwiftのArrayは型を複数持てないので、Objective-CのNSArrayからキャストするときにエラーが起こる場合があります。
これでたまにエラーになることがありました。
以下のような場合です。
let nsarray : NSArray = [ 1.0, 5 ,”String” ] // 複数の型を使う

    var array1 : [String] = nsarray as [String] // エラー

そういったことを考慮して、安全に変換する方法は該当する型だけを配列として抽出するかas?でオプショナル構文としてチェックするかする方が良さそうです。

例えば、String型の配列としてNSArrayをキャストするときには、以下のようにします。

    if let array2 : [String] = nsarray as? [String] { // オプショナル構文


    }


    // 抽出する方法 1
    var array3 = [String]() 

    for obj in nsarray {

        if let str = obj as? String {

            array3.append(str)
        }
    }

    // 抽出する方法 2
    var array4 = ( nsarray as [AnyObject] ).filter{ $0 is String }

これからも更新を続けていきますので、Feedlyへの登録をお願いします!

follow us in feedly

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です