将 Swift 个数组转换为 Objective-C 个数组

Converting Swift arrays into Objective-C arrays

我正在尝试将一个数组从 Swift 数组转换为 NSMutableArray 以便在 Objective-C 代码中使用。到目前为止,结果很糟糕。这就是我所拥有的:

var polygon: [CGPoint] = []
//add bunch of CGPoints to polygon
var polygonNSMutable: NSMutableArray = []
//if better way to convert Swift array into NSMutableArray -> please inform me!
for l in 0 ..< (polygon.count-1) {
     //first attempt:
     polygonNSMutable.addObject(polygon[k] as CGPoint as AnyObject) // Cannot downcast from 'CGPoint' to non-@objc protocol type 'AnyObject'     
     //second attempt:
     polygonNSMutable.addObject(polygon[k]) //results: Type 'CGPoint' does not conform to protocol 'AnyObject'
}

我的问题是,Swift 数组如何转换为 Objective-C?

这里的问题与其说是转换 Swift 数组,不如说是将 C-Structs 存储在 NS<Mutable>Array

首先,您的 for 循环中存在错误。这个:

for l in 0 ..< (polygon.count-1) {

应该是这样的:

for l in 0 ..<polygon.count {

或者:

for l in 0 ... (polygon.count-1) {

好的,现在要将 C-Struct 存储在 NSArray/NSMutableArray 中,我们需要将点存储为 NSValues。 您可以将当前的 for 循环重写为:

for l in 0 ..< (polygon.count-1) {
     polygonNSMutable.addObject(NSValue(CGPoint:polygon[k])
}

但是,您可以像这样遍历您的观点:

for point in polygon {
    polygonNSMutable.addObject(NSValue(CGPoint:point))
}

不过,如果您的 objc 数组不需要可变,使用 map 函数可能会更好:

let objCArray: NSArray = polygon.map { (point) -> NSValue in
    return NSValue(CGPoint:point)
}