gpt4 book ai didi

ios - 我如何在 Swift 中使用 CFArrayRef?

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:07 42 4
gpt4 key购买 nike

我通过桥接头在我的 Swift 项目中使用 Objective-C 类。方法签名看起来像这样:

- (CFArrayRef)someMethod:(someType)someParameter;

我首先获取类的实例、调用方法并存储值:

var myInstance = MyClassWithThatMethod();
var cfArr = myInstance.someMethod(someValue);

然后尝试获取数组中的一个值:

var valueInArrayThatIWant = CFArrayGetValueAtIndex(cfArr, 0);

但是我收到错误 Unmanaged<CFArray>' is not identical to 'CFArray' .什么是Unmanaged<CFArray>甚至是什么意思?

我浏览了 How to convert CFArray to Swift Array?但我不需要将数组转换为 swift 数组(不过那样会很好)。我只需要能够从数组中获取值。

我也试过传递CFArray的方法进入概述的功能 in this answer :

func doSomeStuffOnArray(myArray: NSArray) {

}

但是我在使用它的时候遇到了类似的错误:

doSomeStuffOnArray(cfArr); // Unmanaged<CFArray>' is not identical to 'NSArray'

我正在使用 CFArray因为我需要存储 CGPathRef 的数组, 不能存储在 NSArray 中.

那么我应该如何使用 CFArray在 Swift 中?

最佳答案

正如在 Working with Core Foundation Types , 有两种可能的解决方案您从 Swift 中导入的您自己的函数返回一个 Core Foundation 对象:

  • CF_RETURNS_RETAINEDCF_RETURNS_NOT_RETAINED 注释函数。在你的情况下:

    - (CFArrayRef)someMethod:(someType)someParameter CF_RETURNS_NOT_RETAINED;
  • 或者在 Swift 中使用 takeUnretainedValue()takeRetainedValue() 将非托管对象转换为内存托管对象。在你的情况下:

    var cfArr = myInstance.someMethod(someValue).takeUnretainedValue()

关于ios - 我如何在 Swift 中使用 CFArrayRef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24972835/

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