Ios &引用;空集合文字需要显式类型“quot;Swift3上的错误
我的类中有一个变量:Ios &引用;空集合文字需要显式类型“quot;Swift3上的错误,ios,swift3,Ios,Swift3,我的类中有一个变量: var list = [] func chargeData (data: NSArray){ list = data } 我在类的函数中使用它: var list = [] func chargeData (data: NSArray){ list = data } 它在我的swift2.3项目中运行良好,但当我将其更新为XCode8和Swift3时,它给了我以下错误: 空集合文字需要显式类型 因此,我在列表变量中添加了一个类型转换: var lis
var list = []
func chargeData (data: NSArray){
list = data
}
我在类的函数中使用它:
var list = []
func chargeData (data: NSArray){
list = data
}
它在我的swift2.3
项目中运行良好,但当我将其更新为XCode8
和Swift3
时,它给了我以下错误:
空集合文字需要显式类型
因此,我在列表变量中添加了一个类型转换:
var list = [] as! NSArray
但它给了我以下警告:
将“NSArray”强制强制强制强制转换为相同类型无效
我知道警报不会破坏应用程序,但我希望以适当的方式解决此错误
是否有人犯了同样的错误并正确地解决了它
提前谢谢 由于隐式转换被取消,因此发生此错误,因此您必须告诉编译器显式类型(属于
ArrayLiteral
[]
):
您正在混合Objective(NSArray
)和Swift(Array
)。NSArray
中的项被假定为NSObject
及其子类,而Swift不知道T
是什么,因为数组是空的,因此类型推断不起作用
如果您这样声明:
var data: NSArray = []
会有冲突,因为var
在Swift中表示可变,但在ObjC中NSArray
是不可变的。您可以将其更改为NSMutableArray
,这是NSArray
的一个子类:
let data = NSMutableArray() // note that we don't need var here
// as NSMutableArray is already mutable
如果要将数据
保留为Swift的数组
,请为其指定一个类型:
var data = [MyDataModel]()
// or
var data = [AnyObject]()
// usage:
chargeData(data: data as NSArray)
更新swift 4:
var array = [] as [String]
Swift 5导览非常明确地介绍了如何创建空数组或字典:在第一部分的末尾 要创建空数组或字典,请使用初始值设定项语法
您必须执行
var列表:NSArray=[]
。你只要换一个就行了。但是它本身是不可变的,所以我想最好是var-list:NSMutableArray=[]
。@EricAya不可变本身的事实到底是什么意思?我知道可变意味着它可以改变它的值,但我不确定你说的“可变本身”是什么意思。var/let和NSArray/NSMutableArray.Perfect!对象:var url=[String]();调用方:sm.url.append(“word!”);打印(sm.url[0]);