Ios setValueForKeys正在失败

Ios setValueForKeys正在失败,ios,swift,Ios,Swift,我在操场上有以下代码: class Pokemon : NSObject { var name :String! var id :Int? var imageURL :String! var latitude :Double! var longitude :Double! init(dictionary :[String:Any]) { super.init() setValuesForKeys(diction

我在操场上有以下代码:

class Pokemon : NSObject {

    var name :String!
    var id :Int?
    var imageURL :String!
    var latitude :Double!
    var longitude :Double!

    init(dictionary :[String:Any]) {

        super.init()
        setValuesForKeys(dictionary)
}
}

let dict :[String:Any] = ["name":"John","imageURL":"someimageURL","latitude":45.67]
let pokemon = Pokemon(dictionary: dict)
调用setValuesForKeys时,它会抛出一个异常,说明以下内容:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__lldb_expr_13.Pokemon 0x6000000ffd00> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key latitude.'
***由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合密钥纬度的密钥值编码。”

我有“纬度”键,但由于某种原因,它无法找到它。任何想法

类型
Double
(类似地,
Double?
)在Objective-C世界中没有对应关系,因此,键值编码无法找到名为“latitude”的键并崩溃

如果需要KVC,应该将这些字段转换为非可选字段

class Pokemon : NSObject {
    var name: String!
    var id: Int = 0
    var imageURL: String!
    var latitude: Double = 0.0
    var longitude: Double = 0.0

    init(dictionary: [String: Any]) {
        super.init()
        setValuesForKeys(dictionary)
    }
}

为什么要创建这样的初始值设定项?为什么不创建一个合适的初始值设定项或直接设置属性呢?当然!但是我想找出我在上面的代码中做错了什么。另外,如果你设置了很多属性,这个初始值设定项会很有帮助。那么呢?@NobodyNada Nope!请先阅读我的问题,然后再将其链接到其他问题。我在显式地使用setValuesForKeys函数。@johndoe这是同样的问题,只是不同的症状——像
int
double
这样的类型,在Objective-C中不能是可选的,但没有桥接到Objective-C和String!还是绳子?在Objective-C世界中有对应关系。@johndoe是的,它们在ObjC中成为
NSMutableString*