2017-03-07 10 views
0

私は非常に早く、3列のサーバーから受け取ったJSONデータを表示しようとしていますが、テキストを一列に並べて括弧を削除したいテキストの各ビットを囲んでいます。下の画像を自分のコードとともに添付しました。 SwiftyJSONでJSONデータをmaniplulatingSwift 3でJSONデータをきれいに表示

Swift Screenshot

let u = UserDefaults.standard.value(forKey: "userIP")! 
     var request = URLRequest(url: URL(string: "http://\(u):3000/logs")!) 
     request.httpMethod = "POST" 
     let postString = "LockID=\(lockid)" 
     request.httpBody = postString.data(using: .utf8) 
     let task = URLSession.shared.dataTask(with: request) { data, response, error in 
      guard let data = data, error == nil else {             // check for fundamental networking error 
       print("error=\(error)") 
       return 
      } 

      if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {   // check for http errors 
       print("statusCode should be 200, but is \(httpStatus.statusCode)") 
       print("response = \(response)") 
       DispatchQueue.main.async() { 
       self.displayMyAlertMessage("response = \(response)") 
       } 
      } 

      let responseString = String(data: data, encoding: .utf8) 
     // print("responseString = \(responseString)") 

      if let data = responseString?.data(using: String.Encoding.utf8) { 
       let resString = JSON(data: data) 

       if resString["success"].stringValue == "true" 
       { 
        // save the data to be manipulated and stored in table somehow 
        let returned_name = resString["message"].arrayValue.map({$0["name"].stringValue}) 
        let returned_time = resString["message"].arrayValue.map({$0["lockTime"].stringValue}) 
        let returned_type = resString["message"].arrayValue.map({$0["type"].stringValue}) 

        DispatchQueue.main.async() { 
         self.updatename!.text = "\(returned_name.description)" 
         self.updateLock!.text = " \(returned_type.description)" 
         self.updateText!.text = " \(returned_time.description)" 

       } 

       } 
       else if resString["success"].stringValue == "false" 
       { 
        DispatchQueue.main.async() { 
        self.displayMyAlertMessage(resString["message"].stringValue) 
        } 
       } 

イム。どのように私は[""]を取り除くことができますか?

乾杯

答えて

0

returned_nameおよび他returned...変数はmap機能によって引き起こされる文字列の配列あります。 descriptionメソッドを使用して配列を印刷すると、"[item1, item2, item3]"と表示されます。各文字列を個別に印刷するには、繰り返しループが必要です。

let returnedArray = resString["message"].arrayValue // you might cast the object to `[[String:Any]]` 
    for item in returnedArray { 
     print(item["name"]) 
     print(item["lockTime"]) 
     print(item["type"]) 
    } 

、あなたがモデルを必要とテーブルビューにカスタム構造体

struct Item { 
    let name : String 
    let lockTime : String 
    let type : String 
} 

は、データソース配列

var items : [Item]() 

を作成し、あなたのをマッピングされた最善の方法を値を表示するにはモデルにJSONを受け取りました

let returnedArray = resString["message"].arrayValue 
    for item in returnedArray { 
     let name = item["name"] ?? "" 
     let lockTime = item["lockTime"] ?? "" 
     let type = item["type"] ?? "" 
     items.append(Item(name:name, lockTime:lockTime, type:type)) 
    } 

cellForRowに配列からの行の項目を取得し、例えば値を表示し、viewDidLoadでJSONを解析し、最後にreloadData()を呼び出すためのコードを入れてください:

let item = items[indexPath.row] 
self.updatename!.text = item.name 
self.updateLock!.text = item.lockTime 
self.updateText!.text = item.type 

PS:あなたはスウィフトに新しく追加されたので、スネークケース変数名(returned_name)を使用しないでください。キャメルケース(returnedName)を使用してください。

+0

ありがとうございました!好奇心の外に、ラクダのケースをスネークケースに使う理由はありますか? – CS456

+0

Objective-CとSwiftの命名規則です – vadian

関連する問題