2017-03-25 7 views
1

同じ親クラス(User)から継承する2つのクラス(クライアント、管理者)があります。Swiftの直列化オブジェクトのデータ型を確認

これらの3つのクラスはNSCodingプロトコルを実装しているため、userdefaultsにDataとして格納できます。

私のアプリケーションが起動すると、格納されているデータをSwift オブジェクトにデシリアライズする必要があります。

保存されたデータがどのタイプに属しているかを知る方法はありますか?このような

何か:

let data = defaults.object(forKey: "loggedInUser") as? Data 
if data is Client 
    let client = NSKeyedUnarchiver.unarchiveObject(with: data) as? Client 
if data is Admin 
    let admin = NSKeyedUnarchiver.unarchiveObject(with: data) as? Admin 

答えて

1

あなたは

if let data = defaults.object(forKey: "loggedInUser") as? Data { 
    let obj = NSKeyedUnarchiver.unarchiveObject(with: data) 

    if obj is Client { 
     let client = obj as! Client 
    } 

    if obj is Admin { 
     let admin = obj as! Admin 
    } 
} 
+0

なぜoptionalsを確認することができますか? 'obj'がチェックをパスすると、このタイプは100%で、安全にアンラップできます。 – vadian

+0

これは私にとってうまくいった。 – ansanes

+0

これは私が意味するものではありません。このコードは 'String'や' URL'の初期化子ではありません。 'objがClient'の場合は' nil'でないことが保証されていますので、 'let client = obj as! 'を安全に書くことができます。クライアント ' – vadian

関連する問題