当从字典中访问时,无法将类型为Any的对象向下转换为Int

我有一个Gfycat结构体,它表示在对Gfycat API进行网络调用后要存储的数据。当从字典中访问时,无法将类型为Any的对象向下转换为Int

typealias JSONDictionary = [String: Any] 

struct Gfycat {

let id: String

let number: Int

}

在一个扩展Gfycat结构,我写了failable初始化该采用类型的字典[字符串:任何]作为其参数。这个字典然后被用来为结构的属性赋值。这是原来的init方法我说:

extension Gfycat { 

init?(dictionary: JSONDictionary) {

guard let id = dictionary["gfyId"] as? String,

let number = dictionary["gfyNumber"] as? Int { return nil }

self.id = id

self.number = number

}

}

的问题是,从字典访问值的时候,我不能垂头丧气从任何为int值。我必须先将Any转换为String,然后将该字符串转换为Int。这是一个错误,或者是Swift的一个特性,我不明白?

这是我的解决方案:

extension Gfycat { 

init?(dictionary: JSONDictionary) {

guard let id = dictionary["gfyId"] as? String,

let uncastedNumber = dictionary["gfyNumber"] as? String,

let number = Int(uncastedNumber) else { return nil }

self.id = id

self.number = number

}

}

回答:

我必须先垂头丧气任何为字符串,然后再转换字符串INT。这是一个错误,或者是Swift的一个特性,我不明白?

这既不是Swift的bug也不是功能。这是你正在使用的字典的事实。这东西一个String,不是一个Int。所以你不能将它转换为Int。

以上是 当从字典中访问时,无法将类型为Any的对象向下转换为Int 的全部内容, 来源链接: utcz.com/qa/266097.html

回到顶部