gpt4 book ai didi

macos - 在 Swift 中从 IKImageView 获取 CGImageRef

转载 作者:搜寻专家 更新时间:2023-10-31 22:03:57 26 4
gpt4 key购买 nike

我正在尝试获取与 View 关联的图像,但 Xcode 返回错误。这是代码:

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

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

我有一个 awakeFromNib函数在 View 中设置图像。上面的代码返回给我 'Unmanaged<CGImage>' is not convertible to 'CGImageRef' .

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

最佳答案

这与将 Objective C API 桥接到 Swift 中有关。通过将原始的 Objective C header 转换为 Swift 版本,API 的 Swift 版本已被桥接(我相信大部分是自动的)。在许多情况下,转换可以计算出您将返回什么样的值,因此在 Swift 中,您将获得可以按预期使用的“正常”类型。

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

Unmanaged 类型有效地表示“你必须告诉我如何处理包含的值才能正确进行内存管理”。一旦获得 Unmanaged 值,就应该调用它的两种方法之一:

takeUnretainedValue() 
takeRetainedValue()

...取决于您返回的对象是“+0”还是“+1”。因此,您需要执行以下操作:

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

一旦你完成了那件事(你应该立即做),你已经给了 Swift 足够的提示,它现在可以使用 ARC 正确地管理对象,并为你自己提供了一个有效的引用正确的类型。

今年的“Swift Interoperability in Depth”WWDC 视频结尾简要介绍了这一点。

关于macos - 在 Swift 中从 IKImageView 获取 CGImageRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24309356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com