从返回Any的函数中获取数据

时间:2019-11-27 09:23:18

标签: ios swift casting

你好,我是新手,这给了我一些问题。 我有一个来自SDK的函数,结果返回了Any,这就是实际数据:

/*{
    code = 1;
    msg = success;
    result =     {
        macAddress = "E6:1D:4D:71:64:9B";
    };
}*/

我想出了一种获取所需数据的方法,但这似乎很复杂。

sucBlock: {
    (mac) in
        if let macAddress = ((mac as AnyObject)["result"] as AnyObject )["macAddress"] as! Optional<String>{
                print("macAddress:" + macAddress)
            }
    }

是否有更好的方法来实现此结果?我试图创建一个struct并键入强制转换此对象,但是总以某种方式失败。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您需要避免使用AnyObjectas!

if let macAddress = mac as? [String:Any] , let item =  macAddress["result"] as? [String:String] , let str = item["macAddress"] {
    print("str:" + str)
}

如果您需要一个结构体(不要以为您的简单json确实值得)

do { 
    let data = try JSONSerialization.data(withJSONObject:mac)
    let res = try JSONDecoder().decode(Root.self, from:data)
    print(res.result.macAddress)
}
catch { 
    print(error)
}

struct Root: Codable {
    let code: Int
    let msg: String
    let result: Result
}

// MARK: - Result
struct Result: Codable {
    let macAddress: String
}