有没有办法将 CGPoint 的 NSArray<NSValue> 作为 [CGPoint] 公开给 Swift?
Is there a way to expose an NSArray<NSValue> of CGPoint as [CGPoint] to Swift?
我有这个属性:
@property (nonatomic) NSArray<NSValue *> *vertices;
其中顶点的类型为 CGPoint
。
我知道 swift 有一些方便的语言特性,例如 NS_SWIFT_NAME 可以更改函数名称,但我想知道是否有办法将 属性 公开为 [CGPoint]输入 Swift.
我问的是如何在 objective-c 语法中做到这一点,如何创建一个 objective-c API 在使用时将 "vertices" 公开为 [CGPoint] Swift.
谢谢。
根据我的理解,您需要在 Obj-C 中使用 CGPoint 数组,这样您就可以像这样使用 CGPoint 数组:
self.vertices = @[[NSValue valueWithCGPoint:CGPointMake(0, 10)],
[NSValue valueWithCGPoint:CGPointMake(10, 20)]];
找回那个点:
CGPoint pointValue = [self.vertices[0] CGPointValue];
希望这会有所帮助。
您不能在 Obj-C 中编写 Swift 中 [CGPoint]
类型的 属性。
你可以做的是用 NS_REFINED_FOR_SWIFT
注释你的 vertices
属性。这会将其作为名为 __vertices
的 属性 公开给 Swift。现在,您可以在 Swift 中的 class 上编写扩展,提供自己的 var vertices: [CGPoint]
计算 属性。它可能看起来像
var vertices: [CGPoint] {
return __vertices.map({ [=10=].cgPointValue })
}
这种方法的缺点是每次从 Swift 访问 vertices
属性 时都必须分配一个全新的数组。但是如果你想公开一个[CGPoint]
(除了尝试看看你是否可以实现任何类型的缓存行为,你只创建新的[CGPoint]
如果原始NSArray<NSValue *>
改变了)。
我有这个属性:
@property (nonatomic) NSArray<NSValue *> *vertices;
其中顶点的类型为 CGPoint
。
我知道 swift 有一些方便的语言特性,例如 NS_SWIFT_NAME 可以更改函数名称,但我想知道是否有办法将 属性 公开为 [CGPoint]输入 Swift.
我问的是如何在 objective-c 语法中做到这一点,如何创建一个 objective-c API 在使用时将 "vertices" 公开为 [CGPoint] Swift.
谢谢。
根据我的理解,您需要在 Obj-C 中使用 CGPoint 数组,这样您就可以像这样使用 CGPoint 数组:
self.vertices = @[[NSValue valueWithCGPoint:CGPointMake(0, 10)],
[NSValue valueWithCGPoint:CGPointMake(10, 20)]];
找回那个点:
CGPoint pointValue = [self.vertices[0] CGPointValue];
希望这会有所帮助。
您不能在 Obj-C 中编写 Swift 中 [CGPoint]
类型的 属性。
你可以做的是用 NS_REFINED_FOR_SWIFT
注释你的 vertices
属性。这会将其作为名为 __vertices
的 属性 公开给 Swift。现在,您可以在 Swift 中的 class 上编写扩展,提供自己的 var vertices: [CGPoint]
计算 属性。它可能看起来像
var vertices: [CGPoint] {
return __vertices.map({ [=10=].cgPointValue })
}
这种方法的缺点是每次从 Swift 访问 vertices
属性 时都必须分配一个全新的数组。但是如果你想公开一个[CGPoint]
(除了尝试看看你是否可以实现任何类型的缓存行为,你只创建新的[CGPoint]
如果原始NSArray<NSValue *>
改变了)。