上下文 - 我目前正在学习 Swift Struct
。所以我决定在 Playground 中创建自己的 Phone 结构。 (见下文)
问题 -
phone
结构上的 downloadApp
方法抛出以下错误。不能在不可变值上使用可变成员:'self' 是不可变的
。
期待结果 - 和平地将新字符串 append 到我的 apps
属性,这是一个字符串数组。
Swift代码
struct Phone {
let capacity : Int
let Brand : Sting
var name: String
let model: String
var apps: [String]
var contacts: [String]
var formatCapacity: String {
return "\(capacity)GB"
}
func downloadApp(name: String){
apps.append(name) // ERROR
}
}
最佳答案
您只需将downloadApp
标记为mutating
。该问题是由于 downloadApp
是在 struct
类型中声明的,这是一种值类型,因此如果您更改任何属性(即 apps
array here) 的结构,你实际上改变了结构本身。通过将函数标记为 mutating
,编译器允许通过该类型的成员函数对结构进行此类修改。
mutating func downloadApp(name: String){
apps.append(name)
}
关于arrays - 无法将字符串 append 到 Swift 中的可变数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51527157/