swift – 如何将unmanaged转换为NSData?

swift – 如何将unmanaged转换为NSData?,第1张

概述我需要将Objective-C转换为 Swift以从通讯簿中获取联系人的图像.但是我从CFData转换为NSData时遇到错误,我不知道如何使它工作.我该怎么做才能使这项工作正常进行? 在Objective-C中: ABRecordID contactID = ABRecordGetRecordID(contactRef);ABAddressBookRef addressBook = ABAdd 我需要将Objective-C转换为 Swift以从通讯簿中获取联系人的图像.但是我从CFData转换为NSData时遇到错误,我不知道如何使它工作.我该怎么做才能使这项工作正常进行?

在Objective-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 }
如中所述
Working with Cocoa Data Types,您必须使用takeUnretainedValue()或takeRetainedValue()将非托管对象转换为内存管理对象.
在你的情况下
if (ABPersonHasImageData(person)) {    let imgData = ABPersoncopyImageDataWithFormat(person,kABPersonImageFormatOriginalSize).takeRetainedValue()    let image = UIImage(data: imgData)}

因为ABPersoncopyImageDataWithFormat()返回一个(1)保留值.

总结

以上是内存溢出为你收集整理的swift – 如何将unmanaged转换为NSData?全部内容,希望文章能够帮你解决swift – 如何将unmanaged转换为NSData?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1042802.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存