Objective c CGrect NSArray错误
我试图从一个Swift类创建一个CGRect数组,它最终将被发送到一个目标C类 据我所知,Objective C在创建CGRect数组时需要NSArray或NSMutableArray。我试图制作一个NSArray并附加CGRect,但它会打印错误:Objective c CGrect NSArray错误,objective-c,swift,nsarray,cgrect,Objective C,Swift,Nsarray,Cgrect,我试图从一个Swift类创建一个CGRect数组,它最终将被发送到一个目标C类 据我所知,Objective C在创建CGRect数组时需要NSArray或NSMutableArray。我试图制作一个NSArray并附加CGRect,但它会打印错误: Cannot convert value of type 'NSValue' to expected argument type 'NSArray' Swift代码: var rects = [NSArray]()
Cannot convert value of type 'NSValue' to expected argument type 'NSArray'
Swift代码:
var rects = [NSArray]()
let v = NSValue(CGRect: feature.bounds)
rects.append(v)
各位有什么建议吗 如果必须在swift中创建CGRect数组,可以这样编写:
var rectList = [CGRect]()
let rect1 = CGRectZero
rectList.append(rect1)
在本例中,您正在创建数组的数组。这就是为什么它的说法不能将“NSValue”类型的值转换为预期的参数类型“NSArray”这不是NSArray:
这是NSArray对象的快速数组,即数组中的数组。如果要将NSValue附加到数组中,则需要[NSValue]
然而,我通常会建议不要这样做,这取决于您的具体用例,因为它添加了Swift本身不需要的包装,并且降低了类型安全性。如果在发送给Objective-CAPI之前需要在Swift中与该数组进行交互,那么我将直接创建一个CGRECT数组,如下所示
但是,您现在无法将此数组传递给NSArray参数,您将得到一个错误,提示无法将“[CGRect]”类型的值转换为“[AnyObject]”。为了解决这个问题,您可以简单地在数组中使用map,以便在将每个CGRect发送到Objective-C之前将其包装在一个NSValue中
someObjCInstance.someProperty = rects.map{NSValue(CGRect:$0)}
这样你就能两全其美。您可以在Swift中使用CGRECT数组,从而获得灵活性和类型安全性,还可以与Objective-C进行互操作
someObjCInstance.someProperty = rects.map{NSValue(CGRect:$0)}
var rects = [CGRect]()
rects.append(CGRect(x: 50, y: 50, width: 100, height: 100))
someObjCInstance.someProperty = rects.map{NSValue(CGRect:$0)}