将AnyObject转换为Double

时间:2015-02-05 12:49:46

标签: json swift

我正在尝试使用以下代码解析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。

2 个答案:

答案 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")
}