macos – 从Swift中的IKImageView获取CGImageRef

前端之家收集整理的这篇文章主要介绍了macos – 从Swift中的IKImageView获取CGImageRef前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将图像与视图关联,但 Xcode会给我一个错误.这是代码

@IBOutlet var imageView: IKImageView // Link to the image view.

func saveImage() {
    var newImage: CGImageRef = imageView.image() // Line with an error.
}

我有一个awakeFromNibfunction来在视图中设置图像.上面的代码返回’Unmanaged< CGImage>‘不能转换为’CGImageRef’.

我知道Swift中的类型是可选的,但是我不明白为什么会出现这个错误,IKImageView Class Reference明确表示让IKImageView的图像返回CGImageRef.

解决方法

这与Objective C API与Swift的桥接有关.通过将原始Objective C标头转换为Swift版本,已经桥接了Swift版本的API(我认为主要是自动的).在许多情况下,转换可以计算出你将要获得什么样的价值,因此在Swift中你可以得到一个你可以按照你的期望使用的“普通”类型.

但是,转换仍在进行中.在这种情况下,您所看到的是一种用于帮助您手动管理内存的类型,当转换过程不知道您是否要取回为您保留的对象时,因为API没有有它可以用来解决它的传统注释.

非托管类型有效地说“你必须告诉我如何处理所包含的值以使内存管理正确”.只要获得Unmanaged值,就应该调用其中两种方法之一:

takeUnretainedValue() 
takeRetainedValue()

…取决于你得到的对象是“0”还是“1”.所以,你应该做的事情如下:

var newImage: CGImage = imageView.image().takeUnretainedValue()

一旦你完成了这个(你应该立即做了),你已经给了Swift足够的提示,它现在可以用ARC正确地管理对象,并获得了正确类型的有效引用.

今年WWDC视频“Swift互操作性深度”视频结束时简要介绍了这一点.

原文链接:/swift/819007.html

猜你在找的Swift相关文章