【发布时间】:2014-09-18 07:37:46
【问题描述】:
我通过桥接头在我的 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中无法存储。
那么我应该如何在 Swift 中使用CFArray?
【问题讨论】:
-
将
CGPathRef转换为id有助于Objective-C,但不确定Swift。 -
你能用一个
UIBezierPath,它可以包含一个CGPath,符合NSCoding,所以你应该可以把它放在NSArray中。 -
@Zaph 我考虑过,但这似乎使它变得比需要的更困难。
-
@duci9y CGPath 被创建并添加到 Objective-C 文件中的
CFArray,所以它可能会起作用,就像 Zaph 所说的一样。但是我正在寻找一种在 Swift 中使用CFArrayRef的方法。 -
当显而易见的解决方案是使用本机数组时,您为什么要使用
CFArrayRef?有什么特别的原因吗?
标签: ios objective-c arrays swift