我正在尝试使用以下代码解析JSON:
func ltchandler(response: NSURLResponse!, data : NSData!, error : NSError!) { //Is passed the results of a NSURLRequest
if ((error) != nil) {
//Error Handling Stuff
} else {
if (NSString(data:data, encoding:NSUTF8StringEncoding) == "") {
//Error Handling Stuff
} else {
var data = NSData(data: data);
// Define JSON string
var JSONString = "\(data)"
// Get NSData using string
if let JSONData = JSONString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
// Parse JSONData into JSON object
var parsingError: NSError?
if let JSONObject = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parsingError) as? [String: AnyObject] {
// If the parsing was successful grab the rate object
var rateObject: Double! = JSONObject["price"]?.doubleValue
// Make sure the rate object is the expected type
if let rate = rateObject as? Double! { // THIS IS NOT WORKING!!!
//Do stuff with data
} else {
println("Parsing Issue")
}
}
}
}
}
}
标记为THIS IS NOT WORKING!!!
的行未被调用。
据我所知,它不能将rateObject转换为double - 为什么不呢?它没有显示任何错误。
为了澄清,预期的行为是从JSON对象创建一个double。
答案 0 :(得分:6)
要严格回答您的问题,您是否尝试过打印rateObject。另外,为什么你会在有问题的行中投射到Double!
而不仅仅是Double
?
我个人在几乎所有情况下都不使用!
。你最好使用非选项或适当的选项。
在相关部分我会写:
// Make sure the rate object is the expected type
if let rate = JSONObject["price"]?.doubleValue {
//Do stuff with rate
} else {
print("Parsing Issue")
}
当然,如果JSONObject["price"]
不是doubleValue
方法,或者方法返回nil
,那么最终会得到nil,而其他情况则会被采用。
答案 1 :(得分:1)
代码对我有用,请尝试以下代码:
// if the value equals nil or any String, the instruction abort the if
// SWIFT 2.0 in xcode beta 5
if let rate = Double((JSONObject["price"] as? String)!){
// insert you code here
} else {
print("error message")
}