我有"可选类型“AnyObject?”的值未打开你是不是要使用!或?{" 行guard let tableauDeux =
错误
func attraperJSON() -> String? {
guard let krakenURL = NSURL(string: "https://api.kraken.com/0/public/Ticker?pair=XXBTZEUR") else {
print("Probleme adresse")
return nil
}
guard let tickerData = NSData(contentsOfURL: krakenURL) else {
print("Problème ticker data")
return nil
}
do {
let json = try NSJSONSerialization.JSONObjectWithData(tickerData, options: [])
guard let tableauUn = json["result"] else {return nil }
guard let tableauDeux = tableauUn["XXBTZEUR"] else { return nil}
let prix = tableauDeux["o"]
return prix
} catch {
return nil
}
}
我不知道为什么警卫让我不能工作,谢谢! P.S:我知道它快速2而不是3,但我还在使用xcode 7
答案 0 :(得分:1)
NS
对应 以下代码位于Swift 3
的{{1}}。如果您使用的是旧版本,请进行必要的更改。
Xcode 8
答案 1 :(得分:1)
正如评论中已经建议的那样,我认为你需要在这里明确你的类型。我知道编译器不要求你这样做,但我发现它有助于我的思考,并避免编译器混淆,如果我总是完全明确。记住在你的情况下,函数需要返回一个String,而不是AnyObject,所以你需要确保你有一个String。所以我的函数版本(我对类型做了一些假设,但希望你得到的要点)如下:
func attraperJSON() -> String? {
guard let krakenURL : NSURL = NSURL(string: "https://api.kraken.com/0/public/. Ticker?pair=XXBTZEUR") else {
print("Probleme adresse")
return nil
}
guard let tickerData ; NSData = NSData(contentsOfURL: krakenURL) else {
print("Problème ticker data")
return nil
}
do {
if let json : [String : AnyObject] = try NSJSONSerialization.JSONObjectWithData(tickerData, options: []) as? [String : AnyObject] {
guard let tableauUn : [String : AnyObject] = json["result"] as? [String : AnyObject] else { return nil }
guard let tableauDeux : [String : String] = tableauUn["XXBTZEUR"] as? [String : String] else { return nil }
let prix : String = tableauDeux["o"]
return prix
} catch let retrievalError {
print("Error in \(#function): \(retrievalError.localizedDescription)")
// please put error handling code here
return nil
}
}
希望有所帮助。
答案 2 :(得分:0)
您必须选择将所有词典向下转换为正确的类型
guard let json = try NSJSONSerialization.JSONObjectWithData(tickerData, options: []) as? [String:AnyObject] else { return nil }
guard let tableauUn = json["result"] as? [String:AnyObject] else {return nil }
guard let tableauDeux = tableauUn["XXBTZEUR"] as? [String:AnyObject] else { return nil}
和最终值
let prix = tableauDeux["o"] as? String