我有这个属性:
@property (nonatomic) NSArray<NSValue *> *vertices;
其中顶点的类型为CGPoint
。
我知道 swift 有一些方便的语言功能,例如 NS_SWIFT_NAME 来更改函数名称,但我想知道是否有办法在 Swift 中将该属性公开为 [CGPoint] 类型。
我问的是如何在 Objective-C 语法中执行此操作,如何创建一个 Objective-C API,在 Swift 中使用时将“顶点”公开为 [CGPoint]。
谢谢。
最佳答案
您不能在 Obj-C 中编写 [CGPoint]
类型的属性在 swift 。
您可以做的就是注释您的 vertices
属性 NS_REFINED_FOR_SWIFT
。这会将其作为名为 __vertices
的属性公开给 Swift。反而。现在您可以在 Swift 中为您的类编写一个扩展,提供自己的 var vertices: [CGPoint]
计算属性。它可能看起来像
var vertices: [CGPoint] {
return __vertices.map({ $0.cgPointValue })
}
这种方法的缺点是每次访问vertices
时Swift 的属性必须分配一个全新的数组。但如果你想公开[CGPoint]
,实际上没有任何办法可以解决这个问题。 (除了尝试看看是否可以实现任何类型的缓存行为,只有在原始 [CGPoint]
更改时才创建新的 NSArray<NSValue *>
)。
关于ios - 有没有办法将 CGPoint 的 NSArray<NSValue> 作为 [CGPoint] 公开给 Swift?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45026762/