" Struct"的不变价值只有变异成员名为"功能"

时间:2015-08-29 23:30:40

标签: ios xcode swift ios8 xcode6

我有一个错误,我一直试图解决它,但无法找到正确的解决方案。提前谢谢!

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

的变异成员

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

之前的回答建议将其更改为:

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将按预期进行修改。