2017-01-24 5 views
0

Мой формат данныхSwift JSON Получить в TableViewCell

{ 
    "StationID": "1001", 
    "StationName": { 
     "Zh_tw": "基隆", 
     "En": "Keelung" 
    }, 
    "TrainNo": "1281", 
    "Direction": 1, 
    "TrainClassificationID": "1131", 
    "TripLine": 0, 
    "EndingStationID": "1025", 
    "EndingStationName": { 
     "Zh_tw": "新竹", 
     "En": "Hsinchu" 
    }, 
    "ScheduledArrivalTime": "22:02:00", 
    "ScheduledDepartureTime": "22:04:00", 
    "DelayTime": 0, 
    "Platform": "", 
    "SrcUpdateTime": "2017-01-24T22:14:29+08:00", 
    "UpdateTime": "2017-01-24T22:14:40+08:00" 
    }, 

Мой код (Swift 3)

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell 
    // Configure the cell... 
    cell.stationID.text = trainStatusArray[indexPath.row]["StationID"] as? String 

    let stationDirect = trainStatusArray[indexPath.row]["Direction"] as? Int 
    if stationDirect == 0 { 
     cell.stationdirection.text = "順行" 
    }else{ 
     cell.stationdirection.text = "逆行" 
    } 

    cell.stationtrainNo.text = trainStatusArray[indexPath.row]["TrainNo"] as? String 

    let stationTripline = trainStatusArray[indexPath.row]["TripLine"] as? Int 
    if stationTripline == 0 { 
     cell.stationtripLine.text = "不經山線/海線" 
    }else if stationTripline == 1 { 
     cell.stationtripLine.text = "山線" 
    }else { 
     cell.stationtripLine.text = "海線" 
    } 
    //cell.stationtripLine.text = String(stationTripline!) 

    return cell 
} 

Мой вопрос заключается в том, чтобы получить передачу StationName, ZH_TW и En в TableView камере?

+0

Я бы посоветовал вам уйти и узнать о сериализации JSON. Вы должны настроить новый класс и преобразовать JSON в быстрые объекты, а затем использовать значение модели, например класс или структуру, для хранения преобразованного JSON, поэтому было бы гораздо проще упростить заполнение табличного представления. –

+0

Если использовать trainStatusArray ["StationName"] ["Zh_tw"] не будет работать –

ответ

0

StationName и EndingStationName оба словаря, поэтому вы можете получить значение Zh_tw, как этот путь.

if let stationName = trainStatusArray[indexPath.row]["StationName"] as? [String:Any], 
    let zhTW = stationName ["Zh_tw"] as? String, let en = stationName ["En"] as? String { 
     cell.stationName.text = zhTW 
}else { 
     cell.stationName.text = ""//Set default name 
} 

То же самое относится и к EndingStationName тоже.

Примечание: Вместо того, чтобы использовать массив словаря, если вы создаете массив пользовательского объекта из этого словаря, вам легко будет назначить текст меток в методе cellForRowAt.

+0

Спасибо. Я попробую –

+0

@ 高小 高 Проверьте отредактированный ответ также –

+2

Да, не используется swifyJson –

0

сначала преобразовать JSON String в Data и снова преобразовать Data в Dictionary форме с использованием JSONSerialization

Swift 3

func convertToDictionary(text: String) -> [String: Any]? { 
    if let data = text.data(using: .utf8) { 
     do { 
      return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] 
     } catch { 
      print(error.localizedDescription) 
     } 
    } 
    return nil 
} 

// pass your String JSON 
    let dict = convertToDictionary(text: str) 

Свифта 2

func convertStringToDictionary(text: String) -> [String:AnyObject]? { 
    if let data = text.dataUsingEncoding(NSUTF8StringEncoding) { 
     do { 
      return try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject] 
     } catch let error as NSError { 
      print(error) 
     } 
    } 
    return nil 
} 

получить диктатор от String

let dict= convertStringToDictionary(str) 

if let strStationName= result?["EndingStationName"] { 

    let zhTW = strStationName["Zh_tw"] as? String 

    cell.stationdirection.text=zhTW 
} 
+0

@Dhiry У меня есть функция для получения данных json, вы говорите это? func trainInOutstatusData() { do { let trainInOutstatusData = попробовать? Данные (contentsOf: trainStatusUrl!) let trainInOutStatusjson = попробовать? JSONSerialization.jsonObject (с: trainInOutstatusData !, options: .mutableContainers) если пусть InOutStatus = trainInOutStatusjson as? [[String: AnyObject]] { –

+0

что вы получаете 'InOutStatus' ?? – Dhiru

+0

использовать 'try NSJSONSerialization.JSONObjectWithData (данные, опции: []) как? [String: AnyObject] } catch let error as NSError { print (error) } 'для преобразования' Data' в ** Dictionary ** – Dhiru

Смежные вопросы