ios - 有没有办法将 CGPoint 的 NSArray<NSValue> 作为 [CGPoint] 公开给 Swift?

标签 ios objective-c arrays swift core-graphics

我有这个属性:

@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/

相关文章:

ios - 通过 TestFlight 安装旧版本

应用程序关闭时的 IOS 通知

iphone - 在 UITableViewCell 中添加分隔符

ios - 使用 AVFoundation AVPlayer 循环播放视频?

C++:array1 = array2 vs使用循环将array2的值分配给array1

arrays - 过滤非整数并对二维数组求和

ios - UIButton backgroundRect(forBounds :) not being called

ios - 如何使用 NSArrays 的 NSDictionary 设置 TableView 的 titleForHeaderInSection 和 numberOfRowsInSection?

objective-c - 应用程序在重新启动时无法正常运行

php - php方法意外的t_string