Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios &引用;空集合文字需要显式类型“quot;Swift3上的错误_Ios_Swift3 - Fatal编程技术网

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]);