Argo でnullの場合に空文字や配列を得る。
ArgoはSwiftでJSONのParse処理を簡潔に記載できるライブラリです。
ちょっと古い記事ですが まだSwiftyJSONで消耗してるの? - Qiita でも紹介されています。
ただ、今回のアプリでは以下の振る舞いの方が都合が良くメソッドを追加しました。
import Argo infix operator <||?? { associativity left precedence 150 } private func <| <A where A: Decodable, A == A.DecodedType>(json: JSON, kv:(key:String, orValue:A)) -> Decoded<A> { return json <|? kv.key >>- { $0 == nil ? pure(kv.orValue) : pure($0!) } } /** 受け手がString(not Optional)でJSONがnullの場合に空文字を取得します。 - parameter json: json - parameter key: key - returns: value or empty */ func <| (json: JSON, key: String) -> Decoded<String> { return json <| (key: key, orValue: "") } /** 受け手がArray(not Optional)でJSONがnullの場合に空のArrayを取得します。 <|| では コンパイラが ambiguous と怒ってくるので <||?? で定義します。 - parameter json: json - parameter key: key - returns: value or empty array */ func <||?? <A where A: Decodable, A == A.DecodedType>(json: JSON, key: String) -> Decoded<Array<A>> { return (json <||? key >>- { $0 == nil ? pure([]) : pure($0!) }) }
数値型のプロパティが null の場合に -1 を得るなどのカスタマイズも可能です。