我编写了我的代码,但错误发生了。
我的代码出了什么问题?
class UserCollectionViewModel {
var userDataArray:[[String]] = []
func getUserDevData(userId: String) -> Array<[String]> {
for i in userDataArray{
i.append([]) // Cannot use mutating member on immutable value: 'i' is a 'let' constant
i[0].append("Alpha") // Cannot use mutating member on immutable value: 'i' is a 'let' constant
}
return userDataArray
}
}
答案 0 :(得分:1)
Swift数组是值类型,而不是引用类型。这意味着在这段代码中:
let array = [1, 2, 3, 4]
var copy = array
copy.append(5)
copy
现在有5个元素,但array
仍然只有4个元素的初始值。
for
循环也是如此:
let arrayOfArrays = [[1], [2], [3]]
for array in arrayOfArrays {
// array is a *copy* of one of the sub-arrays of `arrayOfArrays`.
}
您可以迭代遍历数组的索引:
func getUserDevData(userId: String) -> [[String]] {
for i in userDataArray.indices {
userDataArray[i].append([])
userDataArray[i][0].append("Alpha")
}
return userDataArray
}
我不确定这是你想要的,但是,因为你的代码(原样)不进行类型检查。 i.append([])
是一项不可能的操作,因为i
是[String]
:您只能append
String
为其值,而不是空数组,i.append(contentsOf: [])
毫无意义,因为它什么也没做。
所以我希望这个例子让你畅通无阻,但这里也存在行为问题。如果您的程序仍无法正常工作,修复编译器错误将无济于事。
答案 1 :(得分:0)
请看这个。
class UserCollectionViewModel {
var userDataArray:[[String]] = []
var strinArray = [String]()
func getUserDevData(userId: String) -> Array<[String]> {
for index in 0..<userDataArray.count {
userDataArray[index].append(contentsOf: [])
userDataArray[index][0].append("alpha")
}
return userDataArray
}
}
希望这有帮助!