Swift运行时错误:Dictionary literal包含重复键

时间:2015-05-25 14:00:43

标签: ios swift dictionary

我制作一个简单的词典,[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。

1 个答案:

答案 0 :(得分:2)

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

在我的对象初始化之后,我推迟了字典的构造,并且它可以工作。

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

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