"Struct" 的不可变值仅具有名为 "Function" 的可变成员
Immutable Value of "Struct" only only has mutating members named "Function"
我有一个错误,我一直在努力解决,但找不到正确的解决方案。提前致谢!
struct PrizeItem {
enum Rank {
case Ok //Purple
case Good //Blue
case Epic //Green
case Rare //Yellow
case ExtremelyRare //Red
}
let name : String
let description : String
let rank : Rank
let identifier : String
let color : UIColor
var prizeIsActive : Bool! //<-- Important
//Important Functions
mutating func setToActive(){
prizeIsActive = true
}
mutating func setToNotActive(){
prizeIsActive = false
}
}
现在,当我尝试 运行 这个函数时:
func setPrizeToActive(prize:PrizeItem){
prize.setToActive() <-- error here
}
错误说明如下:
Immutable value of type PrizeItem only has mutating members named setToActive
感谢帮助!
较早的回答建议将其更改为:
func setPrizeToActive(var prize:PrizeItem){
prize.setToActive()
}
这解决了编译错误,但没有做任何有用的事情。 prize
仍然是传入值的副本,即使 setToActive()
修改了这个副本,它也会立即被丢弃。如果要修改传递给 setPrizeToActive
的结构,则奖品应标记为 inout
:
func setPrizeToActive(inout prize: PrizeItem) {
prize.setToActive()
}
并调用:
// make sure myprize is declared with var
setPrizeToActive(&myprize)
或者,您可以将 PrizeItem
设为 class。由于class是引用类型,所以传入的prize
会按照你的预期进行修改。
我有一个错误,我一直在努力解决,但找不到正确的解决方案。提前致谢!
struct PrizeItem {
enum Rank {
case Ok //Purple
case Good //Blue
case Epic //Green
case Rare //Yellow
case ExtremelyRare //Red
}
let name : String
let description : String
let rank : Rank
let identifier : String
let color : UIColor
var prizeIsActive : Bool! //<-- Important
//Important Functions
mutating func setToActive(){
prizeIsActive = true
}
mutating func setToNotActive(){
prizeIsActive = false
}
}
现在,当我尝试 运行 这个函数时:
func setPrizeToActive(prize:PrizeItem){
prize.setToActive() <-- error here
}
错误说明如下:
Immutable value of type PrizeItem only has mutating members named setToActive
感谢帮助!
较早的回答建议将其更改为:
func setPrizeToActive(var prize:PrizeItem){
prize.setToActive()
}
这解决了编译错误,但没有做任何有用的事情。 prize
仍然是传入值的副本,即使 setToActive()
修改了这个副本,它也会立即被丢弃。如果要修改传递给 setPrizeToActive
的结构,则奖品应标记为 inout
:
func setPrizeToActive(inout prize: PrizeItem) {
prize.setToActive()
}
并调用:
// make sure myprize is declared with var
setPrizeToActive(&myprize)
或者,您可以将 PrizeItem
设为 class。由于class是引用类型,所以传入的prize
会按照你的预期进行修改。