2016-10-27 5 views
-1

私は人々の列が含まれているJSONレスポンスを取得し、サーバからのモデルオブジェクトswiftyjsonのオブジェクト - 空の値をよりうまく処理するには?

class Person { 
    var name:String? 
    var lastName:String? 
    var adresss:String? 
} 

を持っています。問題は、一部の人が名前の中に値を持ち、いくつかのjsonオブジェクトがフィールド名を持っていないということです。

JSON(データ:データ)を処理しながら、各自のオブジェクトを作成します。

名前が空いている人がいるようです。

この状況をより良く扱うには、将来、私のプログラムは名前を持っていない人に言及してもクラッシュしないでしょう。クラス初期化でデフォルト値を作る?または、各インスタンスを扱うときに、人の各フィールドを展開しますか?

+0

どのように使用したいかの例を示します。 – Vyacheslav

答えて

1

jsonデータをお持ちの場合は、guardを使用してください。すべての3つの値を使用して、変数namelastNameaddressを使用することができます成功した場合には、このようにして

guard let name = json["name"] as? String, 
    let lastName = json["lastName"] as? String, 
    let address = json["address"] as? String else { // Do what you like here if it fails for some of these values} 

:たとえば。

あなたは空の値を設定して、あなたは可能性が毎回継続したい場合は、次の

let name = json["name"] as String ?? "" etc.. 

を私も最初の方法をprefere。

0

安全にアンラップするゼロ値を得るためには、「?」を使用してください。または 'let let'、 'guard let'式を指定します。 これらは、ゼロ値を避けるのに役立ちます。 強制的にアンラップを使用するには '!'を使用しますが、例外が発生する可能性があります。

0

これは何を達成したいかによって異なります。あなたにはさまざまな可能性があります。彼らは有効な情報を持っていない場合は、Personを破棄することができます。この場合、空の値で

を人を破棄

。あなたはあなたのコードを変更することができます。

class Person { 
    let name: String 
    let lastName: String 
    let address: String 
} 

あなたはJSONを受信したとき、あなたは、単に無効な値を防ぐことができます。

guard 
    let name = jsonName as? String, 
    let lastName = jsonLastName as? String, 
    let address = jsonAddress as? String else { return } 

することができます。この場合、オプションの値

で保存する人オプションの値で独自のクラスを使用しますが、使用するたびにそれらをチェックする必要があります。

class Person { 
    var name: String? 
    var lastName: String? 
    var address: String? 
} 

あなたはしてプロパティを保存することができます:あなたは、オプションとして、それらを宣言したことからjsonNamejsonLastNameまたはjsonAddressあなたのコードが動作する場合であっても

person.name = jsonName 
person.lastName = jsonLastName 
person.address = jsonAddress 

。この場合

デフォルト値で保存する人

あなたは、オプションの値を使用して独自のクラスを使用することができますが、あなたがそれらを使用するたびに、あなたは彼らのためにチェックする必要があります。

class Person { 
    var name: String 
    var lastName: String 
    var address: String 
} 

あなたが持つ特性を保存することができます:jsonNamejsonLastNameまたはjsonAddressがnilある

person.name = jsonName ?? "" 
person.lastName = jsonLastName ?? "" 
person.address = jsonAddress ?? "" 

場合、デフォルト値は "" 保存されますが。変数はもはやオプションではないので、変数をチェックする必要はありません。

関連する問題