当前位置: 首页 > 面试题库 >

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

洪浩波
2023-03-14
问题内容

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

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]



 类似资料:
  • 本文向大家介绍Objective-C语言找出数组中的元素数,包括了Objective-C语言找出数组中的元素数的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 在这里您可以看到我带给UIAutomatorViewer的元素。 这是我发现的主要因素。 [![在此处输入图像说明][1]][1]

  • 问题内容: Xcode更新后,我遇到了一个奇怪的问题。在我的应用程序中,当我从API获得响应时,我会手动解析它并将其映射到我的模型。我的代码中有很多地方使用空合并将JSON值转换为如下所示: 它过去可以正常工作,但是在更新后,它始终默认为0。为了确定原因,我尝试强制将其强制转换为如下所示 这导致以下错误 无法将NSNumber桥接到Float 经过进一步调查,我发现Xcode使用的是Swift 3

  • 问题内容: 我正在按照本指南将我的React-Native 0.33代码桥接到一个超级简单的Swift方法,但我得到的只是。 这是我的代码: SwitchManager.swift SwitchManagerBridge.h SwitchManager-Bridging-Header.h 然后在我的文件中,使用导入SwitchManager 并调用。这是发生错误的地方。 不知道怎么了。 问题答案:

  • 问题内容: 我正在尝试抓取以下网站:https : //www.bancosantander.es/es/particulares/prestamos/prestamo- coche/simulador 我正在尝试做的是: 通过移动滑块来模拟数量和持续时间。我正在尝试使用网络驱动程序找到它们。 但是我不能,事实上我已经开始抓取了。 出现的错误如下: 我的代码: 问题答案: 您可以尝试以下方法输入值

  • 我尝试使用selenium测试登录功能,但我得到了这个例外: 这是我的代码: 注意:我尝试使用和xpath,但仍然不起作用。我也尝试在本文中使用一些解决方案,但没有结果 这是Html页面使用框架的菜单和其他表单登录页面 SCT公司 :