Swift 4:为何总是创建含一个对象的数组?能否返回真正的空对象数组?
在Swift 4中创建空对象数组的常见问题解答
嘿,我完全懂你遇到的困惑!很多刚接触Swift的开发者都会在这个语法上踩坑,先直接给你说问题出在哪,再给你正确的写法:
你为啥会得到包含一个对象的数组?
大概率是你不小心用了实例初始化的语法来创建数组了!比如你可能写了这样的代码:
// 错误写法:这里会创建一个包含1个MyObject实例的数组 let notEmptyArray = [MyObject()]
上面的代码里,MyObject()是直接调用了对象的初始化方法,生成了一个实例,然后把这个实例放进了数组字面量[]里,自然就得到了带一个对象的数组。
如何创建真正的空对象数组?
有几种靠谱的写法,任选其一就行:
1. 使用数组类型的空初始化器
直接指定数组的元素类型,然后调用空初始化方法:
// 正确:创建一个空的MyObject数组 let emptyArray1 = [MyObject]()
2. 显式指定类型后赋值空数组字面量
先声明数组的类型,再给它赋值空的[]:
// 正确:同样是空数组 let emptyArray2: [MyObject] = []
3. 可变数组的情况
如果你的数组是需要后续修改的可变数组,写法也类似:
var mutableEmptyArray = [MyObject]() // 之后可以正常添加元素 mutableEmptyArray.append(MyObject())
函数返回空数组的注意点
如果是在函数里要返回空数组,记得要明确函数的返回类型,然后返回空数组即可:
func fetchEmptyObjects() -> [MyObject] { // 直接返回空数组,Swift会自动推断类型匹配 return [] }
总结一下,核心就是区分**“创建空数组”和“创建包含单个实例的数组”**的语法差异——前者是围绕数组类型做文章,后者是在数组字面量里放了一个实例。只要避开[MyObject()]这种写法,就能得到真正的空数组啦!
内容的提问来源于stack exchange,提问作者Todd Cormack
相关产品推荐
相关产品推荐

