gpt4 book ai didi

objective-c - CGrect NSArray 错误

转载 作者:可可西里 更新时间:2023-11-01 00:51:23 24 4
gpt4 key购买 nike

我正在尝试从一个 Swift 类创建一个 CGRect 数组,它最终将被发送到一个 Objective C 类。

据我所知,Objective C 在创建 CGRect 数组时需要 NSArrayNSMutableArray。我试图制作一个 NSArray 并附加 CGRect,但它打印出错误:

 Cannot convert value of type 'NSValue' to expected argument type 'NSArray'

快速代码:

            var rects = [NSArray]()
let v = NSValue(CGRect: feature.bounds)
rects.append(v)

大家有什么建议吗?

最佳答案

这不是一个NSArray:

var rects = [NSArray]()

这是 NSArray 对象的 Swift 数组(即数组中的数组)。如果您想将 NSValues 附加到您的数组,那么您需要一个 [NSValue]

var rects = [NSValue]()
let v = NSValue(CGRect: feature.bounds)
rects.append(v)

但是,我通常建议不要这样做(取决于您的确切用例),因为它添加了 Swift 本身不需要的包装器,并且会降低类型安全性。如果您需要在将它发送到 Objective-C API 之前在 Swift 中与该数组进行交互,那么我会直接创建一个 CGRects 数组,如 @Bhushan suggests

var rects = [CGRect]()
rects.append(CGRect(x: 50, y: 50, width: 100, height: 100))

但是,您现在不能将此数组传递给 NSArray 参数,您会收到一条错误消息,提示 Cannot convert value of type '[CGRect]' to '[AnyObject] '。为了解决这个问题,您可以简单地在数组上使用 map——以便在发送之前将每个 CGRect 包装在 NSValue 中到 Objective-C。

someObjCInstance.someProperty = rects.map{NSValue(CGRect:$0)}

这样您就可以两全其美。您可以获得能够在 Swift 中使用 CGRects 数组的灵 active 和类型安全性,并且还可以获得与 Objective-C 的互操作性。

关于objective-c - CGrect NSArray 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37456630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com