2017-12-05 4 views
0

私はhttps://blockchain.info/tickerに分割したいので、各行は配列内の独自の文字列になります。このjsonを配列内の別々の文字列に分割する方法

私が選択した通貨の価格を表示するAppを作成しています。したがって、誰かがAUDを望むなら、それは配列内の2文字列を取得し、最後のタグにある価格を表示します。私は現在持っているものの単なるコピー&ペースト

私は現在、ちょうどそれがJSONをダウンロードする必要があり..

func reloadJson(){ 

    if globalVariables.currencySelected == "" { 
     globalVariables.currencySelected = globalVariables.currencySelected + "AUD" 
    } 
    print(globalVariables.currencySelected) 

    if let blockchainTickerURL = URL(string: "https://blockchain.info/ticker") { 

     let request = NSMutableURLRequest(url: blockchainTickerURL) 
     let task = URLSession.shared.dataTask(with: request as URLRequest) { 
      data, response, error in 
      var message = "" 

      if error != nil { 
       print("error") 
      } else { 
       if let unwrappedData = data { 
        let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue) 

ザッツは、その正確右のフォーマットされていません。

ありがとうございます。

+0

文字列を分割してJSONを解析している場合、間違っています。 Swift用のJSONDecoderを参照してください –

+0

ありがとう、私はそれを変更しました。私は何をしようとしているのか考えていますか? –

+0

Xcode 9.2 on High Sierra –

答えて

1

Swift4 Codableプロトコルをご覧ください。

対応するプロパティとコード可能なに準拠した通貨辞書値のための構造を作成します。

struct Currency: Codable { 
    let fifteenM: Double 
    let last: Double 
    let buy: Double 
    let sell: Double 
    let symbol: String 
    private enum CodingKeys: String, CodingKey { 
     case fifteenM = "15m", last, buy, sell, symbol 
    } 
} 

あなたのJSONデータをデコードするには、カスタムがするタイプとして[String: Currency]値と辞書を渡すJSONDecoderを使用する必要がありますデコード:

let url = URL(string: "https://blockchain.info/ticker")! 
URLSession.shared.dataTask(with: url) { data, response, error in 
    guard let data = data else { return } 
    do { 
     let currencies = try JSONDecoder().decode([String: Currency].self, from: data) 
     if let usd = currencies["USD"] { 
      print("USD - 15m:", usd.fifteenM) 
      print("USD - last:", usd.last) 
      print("USD - buy:", usd.buy) 
      print("USD - sell:", usd.sell) 
      print("USD - symbol:", usd.symbol) 
     } 
    } catch { print(error) } 

}.resume() 

これは

を印刷します

USD - 15メートル:11694.03

USD - 最後:11694.03

USD - 買う:11695.01

USD - 売る:11693.04

USD - 記号:$

関連する問題