数组元素无法桥接到Objective-C

鸭子

我有这段代码可创建视图并对其应用渐变。

import UIKit
import QuartzCore


let rect : CGRect = CGRectMake(0,0,320,100)

var vista : UIView = UIView(frame: rect)

let gradient : CAGradientLayer = CAGradientLayer()
gradient.frame = vista.bounds

let cor1 = UIColor.blackColor()
let cor2 = UIColor.whiteColor()

let arrayColors = [cor1.CGColor, cor2.CGColor]

gradient.colors = arrayColors

view.layer.insertSublayer(gradient, atIndex:0)

Xcode没有给我任何编译错误,但是代码崩溃了

let arrayColors = [cor1.CGColor, cor2.CGColor]

与消息数组元素不能桥接到Objective-C

实际上,我原以为它会在那里崩溃,因为我不确定如何在Swift上创建CGColors数组。令人惊讶的是Xcode提到了Objective-C。在我看来,我正在快速创建CGColorRef ...

有什么线索吗?为什么提到Objective-C,我该如何解决?

伯格·奎斯特

之所以提到Objective-C是因为UIKit和QuartzCore是Objective-C框架。特别是,gradient.colors = arrayColors正在调用需要一个的Objective-C方法NSArray

这似乎是一个错误,因为Apple的文档表明,NSArray只要可以考虑数组中的项目,数组就应该自动桥接到AnyObject

从Swift数组桥接到NSArray对象时,Swift数组中的元素必须与AnyObject兼容。例如,类型为Int []的Swift数组包含Int结构元素。Int类型不是类的实例,但是因为Int类型桥接到NSNumber类,所以Int类型与AnyObject兼容。因此,您可以将Int []类型的Swift数组桥接到NSArray对象。如果Swift数组中的元素与AnyObject不兼容,则在桥接到NSArray对象时会发生运行时错误。

您还可以遵循上述相同的桥接规则,直接从Swift数组文字创建NSArray对象。当您显式地键入一个常量或变量作为NSArray对象并为其分配数组文字时,Swift会创建一个NSArray对象而不是Swift数组。

目前,解决方法是将其声明arrayColorsNSArray

let arrayColors: NSArray = [cor1.CGColor, cor2.CGColor]

或将其声明为AnyObject

let arrayColors: Array <AnyObject> = [cor1.CGColor, cor2.CGColor]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

UIImagePickerController和致命错误:数组元素无法桥接到Objective-C

无法从Objective-C错误桥接数组

“严重错误:无法从Objective-C桥接数组” —为什么还要尝试Swift,Swift?

NSUserDefault自定义对象错误-“无法从Objective-C桥接数组”

如何将Swift String桥接到Objective C NSString?

无法从Objective-C-> Swift中的问题桥接字典

将Swift桥接到React-Native时,“不是公认的Objective-C方法”

将一系列枚举从Swift桥接到Objective-C

Objective-C int作为Int32桥接到Swift

如何将Objective-C initWithError:方法桥接到Swift

在Objective-C中注释NSArray <NSNumber *> *,以便将其桥接到Array <Int>

Objective-C-桥接C ++的缺点?

即使文件在桥中,为什么我也无法访问objective-c 方法?

框架的Objective-C桥接标题

IOS:Objective-C:如何合并数组元素

无法从Swift代码访问Objective-C单例数组

无法将[[Float]]数组传递到Objective-C ++

在C ++中,如何找到直接或间接链接到数组特定元素的数组的所有元素?

如何创建一个Objective-C桥接头?

将Swift初始化程序桥接到目标C

自动将C结构函数桥接到Swift方法

将Swift 4枚举桥接到目标C

无法连接到Xcode 5和Objective-C中的警报和操作表的每个按钮

我无法将对象类文件连接到uitableview?iOS Objective-C

无法获取数组元素以正确显示C#

Nodejs C++ 插件:无法访问数组元素

卡在C / MPI中无法计数大于x的数组元素

Objective-C数组问题

如何在Objective-C中计算多维数组中的元素数