无法将类型“ _SwiftValue”的值强制转换为“ NSNumber”

时间:2018-10-20 13:06:39

标签: ios swift swift4

我正在尝试将下面的响应中的“状态”转换为Int。

{
    "status": "200",
    "message": "Token successfully generated.",
    "data": {
        "token": "abc"
    }
}

当我尝试转换时,显示错误,例如无法将类型'_SwiftValue'的值强制转换为'NSNumber'。

这是我在代码中尝试过的。

var status:Int = 0
var dict = dictTemp as! Dictionary<String,AnyObject>

if let value = dict["status"] as? String {
    status = value.toInt()!
} else if let value = dict["status"] as? Int {
    status = value
}

//  let status = dictTemp!.value(forKey: "status") as? String ?? ""

if(status == 200)
{
    errorCode = 0
    error = false
}
else
{
    errorCode = 1
    error = true
}

它总是转到其他部分。

在这里,我附上了在JSON数据中可以看到的截图。

请帮助我如何将状态转换为Int。

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为您的问题是因为您使用的是AnyObject而不是Any。 您的字典必须为[String: Any]类型。

查看此答案here

  

AnyObject仅适用于引用类型(类),Any适用于两个值   和参考类型。

此外,由于您将问题标记为Swift 4,因此您应该使用Int()而不是.toInt()进行转换。

示例:

func getStatus(jsonData: Data) -> Int {
    guard
        let json = try? JSONSerialization.jsonObject(with: jsonData, options: []),
        let dict = json as? [String: Any],
        let statusString = dict["status"] as? String,
        !statusString.isEmpty,
        let status = Int(statusString)
        else {
        return 0
    }

    return status
}

答案 1 :(得分:0)

使用结构更加安全:

FETCH