Я попытался установить адрес ABRecord
на вопрос SE here [ответ Авинаша] и ресурс Apple here [внизу страницы 18 и в начало страницы 19]. Я сделал все возможное, чтобы перевести их из Objective-C, но, видимо, я ошибся где-то, так как на линии let dict = CFDictionaryCreate(kCFAllocatorDefault, keys, values, 5, &kCFCopyStringDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)
я получаю ошибку Cannot assign to immutable value of type 'CFDictionaryValueCallBacks'
.Swift: Set Address Свойство ABRecord
Вот мой код:
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)
В мире NSDictionary намного легче работать, чем в мире CFDictionary. Здесь абсолютно ничего не нужно, кроме NSDictionary. Просто создайте словарь в обычном Swift. – matt
@matt Привет, спасибо за подсказку. Я попробовал 'let dict: NSDictionary = [kABPersonAddressStreetKey: s [" kABPersonAddressStreetKey "] !! как NSString, ... ', но получил сообщение о том, что не было перегрузки для индекса, который принимает следующие аргументы. Могли бы вы или кто-либо еще предоставить небольшой пример кода о том, как реализовать свое предложение? – Randoms
Что такое '' '? Похоже, что это уже словарь, который вы хотите. – matt