首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift: ABRecord的Set地址属性

Swift: ABRecord的Set地址属性
EN

Stack Overflow用户
提问于 2015-08-11 03:29:47
回答 1查看 430关注 0票数 1

我查看了SE问题这里 Avinash的答案和苹果资源这里的第18页底部和第19页顶部,试图为ABRecord设置一个地址。我尽力将它们从Objective翻译过来,但是显然我犯了一个错误,因为在let dict = CFDictionaryCreate(kCFAllocatorDefault, keys, values, 5, &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)上我得到了错误Cannot assign to immutable value of type 'CFDictionaryValueCallBacks'

这是我的密码:

代码语言:javascript
复制
    let information: ABRecord = ABPersonCreate().takeRetainedValue()

    let address: ABMutableMultiValueRef = ABMultiValueCreateMutable(ABPropertyType(kABMultiDictionaryPropertyType)).takeUnretainedValue()

    var keys = [CFStringRef]()
    var values = [CFStringRef]()

    keys.append(kABPersonAddressStreetKey)
    keys.append(kABPersonAddressCityKey)
    keys.append(kABPersonAddressStateKey)
    keys.append(kABPersonAddressZIPKey)
    keys.append(kABPersonAddressCountryKey)
    keys.append(kABPersonAddressCountryCodeKey)

    Note: country code left out

    values.append(s["kABPersonAddressStreetKey"]!! as NSString)
    values.append(s["kABPersonAddressCityKey"]!! as NSString)
    values.append(s["kABPersonAddressStateKey"]!! as NSString)
    values.append(s["kABPersonAddressZIPKey"]!! as NSString)
    values.append(s["kABPersonAddressCountryKey"]!! as NSString)
    values.append(s["kABPersonAddressCountryCodeKey"]!! as NSString)

    let dict = CFDictionaryCreate(kCFAllocatorDefault, keys, values, 5, &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)

    let scanned = ABUnknownPersonViewController()

    let identifier = ABMultiValueIdentifier()

    ABMultiValueAddValueAndLabel(address, dict, kABHomeLabel, &identifier)

    ABRecordSetValue(information, kABPersonAddressProperty, address, nil)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 16:21:43

我确信有一种更简洁的方法可以做到这一点,但我想出了一个解决方案。

代码语言:javascript
复制
 var addressComponents = [String : String]()

    if let value = s["kABPersonAddressStreetKey"] {
        addressComponents[kABPersonAddressStreetKey as String] =  value
    }

    if let value = s["kABPersonAddressCityKey"] {
        addressComponents[kABPersonAddressCityKey as String] = value
    }

    if let value = s["kABPersonAddressStateKey"] {
        addressComponents[kABPersonAddressStateKey as String] = value
    }

    if let value = s["kABPersonAddressZIPKey"] {
        addressComponents[kABPersonAddressZIPKey as String] = value
    }

    if let value = s["kABPersonAddressCountryKey"] {
        addressComponents[kABPersonAddressCountryKey as String] = value
    }

    if let value = s["kABPersonAddressCountryCodeKey"] {
        addressComponents[kABPersonAddressCountryCodeKey as String] = value
    }

    let address: ABMutableMultiValue = ABMultiValueCreateMutable(ABPropertyType(kABMultiStringPropertyType)).takeRetainedValue()
    ABMultiValueAddValueAndLabel(address, addressComponents, kABHomeLabel, nil)
    ABRecordSetValue(information, kABPersonAddressProperty, address, nil)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31932726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档