我有一个错误,我一直试图找出答案,但找不到正确的解决方案。提前致谢!
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
}
该错误说明以下内容:
类型PrizeItem的不可变值仅具有名为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
设为一个类。由于类是引用类型,因此传入的prize
将按照您的期望进行修改。