这是一个更好的例子:
let person: ABRecordRef = ABPersonCreate().takeRetainedValue()
let phoneNos = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue()
if ABMultiValueGetCount(phoneNos) > 0 {
print("yay") } else {
print("nay") //you will never see this }
总是崩溃。
let person: ABRecordRef = ABPersonCreate().takeRetainedValue()
//lets add a number then
let phoneNumbers: ABMutableMultiValue =
ABMultiValueCreateMutable(ABPropertyType(kABMultiStringPropertyType)).takeRetainedValue()
ABMultiValueAddValueAndLabel(phoneNumbers, "1234", kABPersonPhoneMainLabel, nil)
ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumbers, nil)
let phoneNos = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue()
if ABMultiValueGetCount(phoneNos) > 0 {
print("yay")
} else {
print("nay") //you will never see this
}
工作得很好。 我需要检查是否有电话号码,当ABRecordCopyValue无法在没有爆炸的情况下返回零时,我应该怎么做#$ ^%。
答案 0 :(得分:0)
如果ABRecordCopyValue
返回nil
,以下内容可以防止崩溃;但是如果返回一个值,它将存储在phoneNos
:
if let phoneNos = ABRecordCopyValue(person, kABPersonPhoneProperty)?.takeRetainedValue()
{
print("\(person)'s phone number: \(phoneNos)")
}
else
{
print("nay")
}