我有这个属性:
@property (nonatomic) NSArray<NSValue *> *vertices;
其中顶点的类型为CGPoint
。
我知道swift有一些方便的语言功能,例如NS_SWIFT_NAME来更改函数名称,但我想知道是否有办法在Swift中将该属性公开为[CGPoint]类型。
我问的是如何在objective-c语法中执行此操作,如何创建一个公开&#34; vertices&#34;的Objective-c API。在Swift中使用时作为[CGPoint]。
感谢。
答案 0 :(得分:0)
根据我的理解,你需要Obj-C中的CGPoint数组,所以你可以像这样使用CGPoint数组:
self.vertices = @[[NSValue valueWithCGPoint:CGPointMake(0, 10)],
[NSValue valueWithCGPoint:CGPointMake(10, 20)]];
获取这一点:
CGPoint pointValue = [self.vertices[0] CGPointValue];
希望这会有所帮助。
答案 1 :(得分:0)
你不能在Obj-C中写一个Swift中[CGPoint]
类型的属性。
您可以做的是使用vertices
为NS_REFINED_FOR_SWIFT
媒体资源添加注释。这将把它作为名为__vertices
的属性公开给Swift。现在,您可以在Swift中为您的类编写一个扩展,它提供了自己的var vertices: [CGPoint]
计算属性。它可能看起来像
var vertices: [CGPoint] {
return __vertices.map({ $0.cgPointValue })
}
这种方法的缺点是每次从Swift访问vertices
属性时,都必须分配一个全新的数组。但是,如果你想公开[CGPoint]
(除了试图看看你是否可以实现任何类型的缓存行为,你只能创建新的[CGPoint]
如果原始NSArray<NSValue *>
,那么实际上并没有任何解决方法。 1}}已经改变了。