2017-05-23 25 views
0

SwiftyJSONを使用してJSONを解析しようとしています。私は正常に必要なすべてを行うことができましたが、フラットマップのようなものを使用してコードを少しきれいに素早く行うためのより良い方法があると思います。ループなしでswiftyjsonを使用してJSONを解析する

今はAPIコールの後にJSONデータを取得しています。私はこのコードを使用してJSONデータを解析し、それをカスタムクラスのContactに配置します。カスタムクラス "連絡先"には、 "firstName"、 "lastName"、 "phoneNumber"のような文字列があります。

補完ハンドラでJSONを解析するために使用されているループとその呼び出しを次に示します。フラット・マップなどを使ってこれを行うより良い方法はありますか?

Alamofire.request(url, method: .get).responseJSON{ response in 
    switch response.result { 
    case .success(let value): 

     let swiftyJsonVar = JSON(response.result.value!) 
     let totalResponseArray = swiftyJsonVar.arrayValue 

     var allTheContacts = [Contact]() 

     for contact in 0 ..< totalResponseArray.count{ 

      let itterateArray = totalResponseArray[contact] //singleRetailer 
      let contactToAppend = Contact() 

      contactToAppend.firstName = itterateArray["firstName"].stringValue 
      contactToAppend.lastName = itterateArray["lastName"].stringValue 
      contactToAppend.phoneNumber = itterateArray["phone"].stringValue 

      allTheContacts.append(contactToAppend) 
     } 
    } 
} 

答えて

0

使用このマップ機能を

var allTheContacts = totalResponseArray.map { (obj) -> Contact in 

let contactToAppend = Contact() 
contactToAppend.firstName = obj["firstName"].stringValue 
contactToAppend.lastName = obj["lastName"].stringValue 
contactToAppend.phoneNumber = obj["phone"].stringValue 
    return contactToAppend 
} 
0

あなたはかなりのマップやループ機能を使用して立ち往生しています。それほど簡単な方法ではありません。あなたがコードをクリーンアップしようとしているかどうかを覚えておくべきことの1つは、すばやいJSON配列のオブジェクトがJSONオブジェクトであることです。だから私がコードでやろうとしていることの1つは、それが属するクラスのためのJSONをinit関数に抽象化することです。

class Contact { 
    var firstName: String 
    var lastName: String 
    var phoneNumber: String 

    init(json: JSON) { 
     contactToAppend.firstName = obj["firstName"].stringValue 
     contactToAppend.lastName = obj["lastName"].stringValue 
     contactToAppend.phoneNumber = obj["phone"].stringValue 
    } 
} 

このように、ループをはるかに簡単に定義することも、単純なマップを使用することもできます。

var allTheContacts = totalResponseArray.map { (obj) -> Contact in 
    return contact(json: obj) 
} 

やループバージョン

var allTheContacts = [Contact]() 
for contact in totalResponseArray { 
    allTheContacts.append(Contact(json: contact)) 
} 
関連する問題