我需要将我的目标-C转换为Swift,以便从通讯簿获得联系人的图像。但是,从CFData到NSData的for强制转换出现了一个错误,我不知道如何做到这一点。我能做些什么才能使这件事正确运作呢?
在目标C中:
ABRecordID contactID = ABRecordGetRecordID(contactRef);
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef origContactRef = ABAddressBookGetPersonWithRecordID(addressBook, contactID);
if (ABPersonHasImageData(origContactRef)) {
NSData *imgData = (NSData*)ABPersonCopyImageDataWithFormat(origContactRef, kABPersonImageFormatOriginalSize);
img = [UIImage imageWithData: imgData];
[imgData release];
}
CFRelease(addressBook);
return img;在Swift:
var image: UIImage!
if ABPersonHasImageData(person) {
var imgData = (ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatOriginalSize))
image = UIImage.imageWithData(imgData) //Here get the error
}发布于 2014-08-12 11:15:57
正如在使用Cocoa数据类型中解释的那样,您必须使用takeUnretainedValue()或takeRetainedValue()将非托管对象转换为内存托管对象。在你的情况下
if (ABPersonHasImageData(person)) {
let imgData = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatOriginalSize).takeRetainedValue()
let image = UIImage(data: imgData)
}因为ABPersonCopyImageDataWithFormat()返回一个(+1)保留值。
发布于 2015-03-28 00:15:41
if let imgData = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatOriginalSize)?.takeUnretainedValue() {
if let image = UIImage(data: imgData) {
//Here's your UIImage
}
}https://stackoverflow.com/questions/25262542
复制相似问题