上下文-我目前正在学习Swift Struct
。因此,我决定在Playground中创建自己的Phone结构。 (见下文)
问题-
downloadApp
结构上的phone
方法引发以下错误。Cannot use mutating member on immutable value: 'self' is immutable
。
期待结果-和平地将新字符串添加到我的apps
属性中,该属性是一个字符串数组。
快捷代码
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
}
}
答案 0 :(得分:1)
您只需要将downloadApp
标记为mutating
。该问题是由于以下事实引起的:downloadApp
以struct
类型声明,这是一种值类型,因此,如果您更改了apps
类型的任何属性(即此处的mutating
数组),结构,您实际上是在改变结构本身。通过将函数标记为mutating func downloadApp(name: String){
apps.append(name)
}
,编译器允许通过类型的成员函数对结构进行此类修改。
RepeatVector