将 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
中,我们需要将点存储为 NSValue
s。
您可以将当前的 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)
}
我正在尝试将一个数组从 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
中,我们需要将点存储为 NSValue
s。
您可以将当前的 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)
}