2017-12-17 4 views
0

저는 Swift 4를 처음 사용하고 제 문제에 대한 해결책을 찾기 위해 몇 시간 씩 보였습니다. 난 그냥 namesymbol 필요Swift4/JSON/Decode

[ 
{ aliases: [ ], 
name: "300 Token", 
symbol: "300", 
}, 
{ 
aliases: [ ], 
name: "SixEleven", 
symbol: "611", 
}, 
] 

: 같은

import Foundation 

public struct Coin: Codable { 
    let name: String //= "Default" 
    let symbol: String 
} 

open class CoinCapIOAPI { 

func fetchMap() { 

    let urlString = "http://socket.coincap.io/map" 
    guard let url = URL(string: urlString) else { return } 

    URLSession.shared.dataTask(with: url) { (data, response, error) in 
     // Maybe later... 
     guard let data = data else { return } 

     do { 

      let coins = try JSONDecoder().decode([Coin].self, from: data) 
      print(coins) 


     } catch let jsonErr { 
      print("Error: ", jsonErr) 
     } 

     }.resume() 
    } 
} 

는 JSON 보인다. 그러나 구조체의 이름의 기본없이 나는 다음과 같은 얻을 오류 :

내가 "이름"의 기본 값을 추가하면 나는이 결과를 얻을

Error: keyNotFound(CoinBartender.Coin.(CodingKeys in _7C60C6A5E9E301137DE95AF645AB94EB).name, Swift.DecodingError.Context(codingPath: [Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 91", intValue: Optional(91))], debugDescription: "No value associated with key name (\"name\").", underlyingError: nil))

:

[CoinBartender.Coin(name: "Default", symbol: "300"), CoinBartender.Coin(name: "Default", symbol: "611"),

이유는 무엇입니까 symbol 작업하지만 name 아무튼 '티?

+0

결과 집합을 자세히 살펴보면 모든 레코드가'name' 속성을 가지고있는 것은 아닙니다. – Gereon

답변

2

오류 메시지를 자세히 읽으십시오. 그것은 정확하게 문제를 설명하는 것 :

Error: keyNotFound(CoinBartender.Coin.(CodingKeys in _7C60C6A5E9E301137DE95AF645AB94EB).name, Swift.DecodingError.Context(codingPath: [Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 91", intValue: Optional(91))], debugDescription: "No value associated with key name (\"name\").", underlyingError: nil))

그것은 말한다을 그 92 항목 (인덱스는 제로) 키를 name

{"aliases":[],"symbol":"QTM"} 

하나의 솔루션으로 선택 name을 선언하는 것입니다 없습니다

let name: String? 
+0

정말 고마워요. 나는 정말로 눈이 멀었다. – Mika

0

코인 구조체는 다음과 같아야합니다.

public struct Coin: Codable { 
    let name: String? //= "Default" 
    let symbol: String 
} 

일부 색인에는 name이 포함되지 않기 때문에.

+0

정말 고마워요. 나는 정말로 눈이 멀었다. – Mika