Ios Swift运行时错误:字典文本包含重复的键

Ios Swift运行时错误:字典文本包含重复的键,ios,swift,dictionary,Ios,Swift,Dictionary,我正在制作一本简单的字典,[ABPropertyID:String]: let propertyToMethod = [ kABPersonInstantMessageProperty : "contactMethodInstantMessage", kABPersonEmailProperty : "contactMethodEmail", kABPersonPhoneProperty : "contactMethodPhoneCall" ] 这会在运行时崩溃,因为

我正在制作一本简单的字典,
[ABPropertyID:String]

let propertyToMethod = [ 
    kABPersonInstantMessageProperty : "contactMethodInstantMessage",
    kABPersonEmailProperty : "contactMethodEmail",
    kABPersonPhoneProperty : "contactMethodPhoneCall" ]
这会在运行时崩溃,因为
字典文本包含重复的键。似乎
ABPropertyID
类型的键直到运行时才解析。。。?但无论如何,当它们被用来区分通讯簿属性时,为什么它们之间会有重复呢

还有,为什么它们都是零

println("kabIM: \(kABPersonInstantMessageProperty), kabEmail: \(kABPersonEmailProperty), kabPhone: \(kABPersonPhoneProperty)")
打印
kabIM:0、kabEmail:0、kabPhone:0

我当时的工作印象是,它们是具有唯一值的编译时常量。以下是它们在库中的声明方式:

let kABPersonEmailProperty: ABPropertyID // Email(s) - kABMultiStringPropertyType


运行在iphone 5、8.3上。

我的原始代码可以编译,但由于某些原因,这些是运行时“常量”,在未知点将值从0更改为其他值

我将字典的构建推迟到我的对象初始化之后,它就可以工作了

var propertyToMethod: [ABPropertyID : String] { get {
    println("kabIM: \(kABPersonInstantMessageProperty), kabEmail: \(kABPersonEmailProperty), kabPhone: \(kABPersonPhoneProperty)")
    return [ kABPersonInstantMessageProperty : contactMethodInstantMessage,
    kABPersonEmailProperty : contactMethodEmail,
    kABPersonPhoneProperty : contactMethodPhoneCall ] }
}

但是我仍然不能确定它将来是否会崩溃…

根据我链接到的“副本”,在使用这些“常量”之前,您必须调用通讯簿中的一个“创建”函数,例如
ABAddressBookCreateWithOptions()
。谢谢!我看了答案,但在链接文档中找不到引用的段落。我也找不到。但是,在调用
ABAddressBookCreateWithOptions()
之后,链接到的答案似乎仍然是正确的,“常量”的计算结果为非零数。
var propertyToMethod: [ABPropertyID : String] { get {
    println("kabIM: \(kABPersonInstantMessageProperty), kabEmail: \(kABPersonEmailProperty), kabPhone: \(kABPersonPhoneProperty)")
    return [ kABPersonInstantMessageProperty : contactMethodInstantMessage,
    kABPersonEmailProperty : contactMethodEmail,
    kABPersonPhoneProperty : contactMethodPhoneCall ] }
}