我有一个错误,我一直试图找出答案,但找不到正确的解决方案。提前致谢!

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将按照您的期望进行修改。

10-08 12:28