【问题标题】:Could not cast value of type '__NSCFNumber' (0x1105dc3c0) to 'NSString' Swift 3无法将“__NSCFNumber”(0x1105dc3c0)类型的值转换为“NSString”Swift 3
【发布时间】:2017-05-17 08:41:24
【问题描述】:

这是我的网址回复

{
"base": "EUR",
"date": "2017-05-16",
"rates": {
    "AUD": 1.492,
}}

这是我的代码

Alamofire.request("http://api.fixer.io/latest").responseJSON { response in
        guard let JSON = response.result.value else{
            print("Error")
            return
        }
            print("JSON: \(JSON)")
        let dict = JSON as! NSDictionary
        let base : String = dict["base"] as! String
        print("Base:", base)
        let date : String = dict["date"] as! String
        print("Date:", date)
        let rateDict = dict["rates"] as! NSDictionary
        let aud : String = rateDict["AUD"] as! String
        print("AUD:", aud)
    }

let aud : String = rateDict["AUD"] as!字符串 上面标题中提到的消息有错误。这里发生了什么事。请任何人帮助我。

【问题讨论】:

  • 它是一个数字,您尝试将其强制转换为字符串,这就是正在发生的事情 - 顺便说一下,错误消息清楚地说明了这一点。看一下json就知道1.492周围没有""

标签: json swift casting nsdictionary


【解决方案1】:

你可以把它转换成字符串,

let aud : String = String(rateDict["AUD"])

let aud : String = NSString(format: "%0.2f", rateDict["AUD"]) as String

【讨论】:

    【解决方案2】:

    这是一个浮点而不是字符串。 cast 是浮动

    let aud = rateDict["AUD"] as! Float
    

    编辑:避免强制转换,因为如果数据不是预期的,这可能会使您的应用程序崩溃。 使用下面的代码可以防止崩溃

    if let rateDict = dict["rates"] as? [String : Any] {
        if let aud = rateDict["AUD"] as? Float {
            print("\(aud)")
        }
    }
    

    【讨论】:

    • 实际上强制转换为Float 会导致崩溃。
    • 只有当json结构不是如上。我会更新
    • 不,即使值是浮点数,它也总是崩溃。你必须投到Double。您编辑的代码将永远不会打印aud 率。
    • @vadian 请查看它的工作截图:i.stack.imgur.com/Bcdxb.png
    • 很奇怪。我在 Playground 和项目中遇到异常。
    猜你喜欢
    • 2017-04-09
    • 2017-09-26
    • 2015-08-29
    • 2019-02-03
    • 2019-01-10
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多