以下代码无法在最后一行编译:"无法找到' + ='接受提供的参数。"
如何在不更改项目类型的情况下修复代码?
class Test {
var items:String[]?
func process() {
if (self.items == nil) {
self.items = String[]()
}
for i in 1...5 {
var item = String(i)
self.items! += item
}
}
}
答案 0 :(得分:1)
我还没有想出一种附加到可选数组的方法。我不相信这是可能的。通过执行此操作,您可以实现与代码尝试执行的操作类似的效果:
class Test {
@lazy var items = [String]()
func process() {
for i in 1...5 {
var item = String(i)
self.items.append(item)
}
}
}
注意:我已向Apple提交了有关此问题的错误
答案 1 :(得分:1)
懒洋洋地创建它:
class Test {
@lazy var items = String[]()
...
}
答案 2 :(得分:1)
以下内容将项目保留为可选数组,同时保持一般流程:
class Test {
var items : String[]?
func process() {
var items = self.items ? self.items! : String[]()
for i in 1...5 {
var item = String(i)
items += item;
}
self.items = items
}
}
答案 3 :(得分:0)
在随Xcode 6 Beta 5提供的Swift版本中,错误已修复,代码正常运行(当然是在改编之后),这是新代码:
class Test {
var items:[String]?
func process() {
if (self.items == nil) {
self.items = [String]()
}
for i in 1...5 {
var item = String(i)
self.items!.append(item)
}
}
}
<击> 我发现展开的结果是常量,而常量不能变异。因此错误“无法找到接受提供的参数的'+ ='的重载。”因为运算符'+ ='定义为:
@assignment func +=<A : ArrayType>(inout lhs: A, rhs: A._Buffer.Element)
因此,作为解决方案,您可以使用@lazy
属性(根据GoZoner建议并在drewag的答案中看到)或David创建临时变量的方法。
@lazy
):取自drewag的回答
class Test {
@lazy var items = String[]()
func process() {
for i in 1...5 {
var item = String(i)
self.items.append(item)
}
}
}
取自David的回答
class Test {
var items : String[]?
func process() {
var items = self.items ? self.items! : String[]()
for i in 1...5 {
var item = String(i)
items += item;
}
self.items = items
}
}
击> <击> 撞击>