我制作一个简单的词典,[ABPropertyID : String ]
:
let propertyToMethod = [
kABPersonInstantMessageProperty : "contactMethodInstantMessage",
kABPersonEmailProperty : "contactMethodEmail",
kABPersonPhoneProperty : "contactMethodPhoneCall" ]
这在运行时与Dictionary literal contains duplicate keys
崩溃。似乎ABPropertyID
类型的键在运行时之前都没有解决......?但无论哪种方式,当他们用来区分地址簿属性时,为什么他们之间会有重复?
而且,为什么它们都是零?:
println("kabIM: \(kABPersonInstantMessageProperty), kabEmail: \(kABPersonEmailProperty), kabPhone: \(kABPersonPhoneProperty)")
打印kabIM: 0, kabEmail: 0, kabPhone: 0
。
我的印象是它们是具有唯一值的编译时常量。这是它们在库中声明的方式:
let kABPersonEmailProperty: ABPropertyID // Email(s) - kABMultiStringPropertyType
...
typealias ABPropertyID = Int32
在iphone 5上运行,8.3。
答案 0 :(得分:2)
我的原始代码编译,但由于某种原因,这些是运行时“常量”,在未知点将值从0更改为其他内容。
在我的对象初始化之后,我推迟了字典的构造,并且它可以工作。
var propertyToMethod: [ABPropertyID : String] { get {
println("kabIM: \(kABPersonInstantMessageProperty), kabEmail: \(kABPersonEmailProperty), kabPhone: \(kABPersonPhoneProperty)")
return [ kABPersonInstantMessageProperty : contactMethodInstantMessage,
kABPersonEmailProperty : contactMethodEmail,
kABPersonPhoneProperty : contactMethodPhoneCall ] }
}
但是我仍然不能确定它将来不会崩溃......