变异运算符的左侧不是可变的:'visiter' 是一个 'let' 常量?为什么?
Left side of mutating operator isn't mutable: 'visiter' is a 'let' constant? WHY?
在我尝试从客人的钱中减去成本时,错误“'变异运算符的左侧不可变:'visiter' 是一个 'let' 常数” ' 当我尝试使用运算符 -= 时抛出
但为什么?我把它声明为变量!我能做什么?在入口函数和bar函数处抛出错误:
struct ClubGuest: Guest {
var name: String
var money: Double
var onDrugs: Bool
}
var mikel = ClubGuest(name: "Mikel", money: 50.5, onDrugs: false)
var angelina = ClubGuest(name: "Angelina", money: 400, onDrugs: true)
var steve = ClubGuest(name: "Steve", money: 100.80, onDrugs: true)
var july = ClubGuest(name: "July", money: 1050, onDrugs: false)
struct Club: Party {
var name: String
var location: String
var entryPrice: Double
var guests: [Guest]
var maximumguests: Int
var revenue = 0.0
mutating func entry(visiter: Guest) {
if visiter.money > entryPrice && guests.count < maximumguests {
guests.append(visiter)
visiter.money -= entryPrice
revenue += entryPrice
} else {
stop()
}
GuestCheckUP(guest: visiter)
}
mutating func Bar(guest: Guest, drink: Drink) {
print("\(guest) want to buy a drink")
if guest.money >= drink.price {
guest.money -= drink.price
revenue += drink.price
print("\(guest.name) bought a \(drink.name) for \(drink.price)$, now he/she has \(guest.money)$ in his/her pocket")
} else {
print("\(guest.name) has too less money for a drink!")
}
}
mutating func GuestCheckUP(guest: Guest) {
if guest.onDrugs {
throwOut(visiter: guest)
}
}
mutating func throwOut(visiter: Guest) {
print("\(visiter.name) was throwed out by the security!")
}
func stop() {
print("Stop! No entry!")
}
func Earnings() {
print("The earnings of tonight are \(revenue)$")
}
}
请注意,Guest 是一种协议,而不是一种类型。您应该首先确保在您的来宾协议中声明 money
属性 需要 setter,使您的方法通用并向其添加 inout 关键字:
protocol Guest {
var money: Double { get set }
// your code
}
mutating func entry<T: Guest>(visiter: inout T) {
// your code
}
在我尝试从客人的钱中减去成本时,错误“'变异运算符的左侧不可变:'visiter' 是一个 'let' 常数” ' 当我尝试使用运算符 -= 时抛出 但为什么?我把它声明为变量!我能做什么?在入口函数和bar函数处抛出错误:
struct ClubGuest: Guest {
var name: String
var money: Double
var onDrugs: Bool
}
var mikel = ClubGuest(name: "Mikel", money: 50.5, onDrugs: false)
var angelina = ClubGuest(name: "Angelina", money: 400, onDrugs: true)
var steve = ClubGuest(name: "Steve", money: 100.80, onDrugs: true)
var july = ClubGuest(name: "July", money: 1050, onDrugs: false)
struct Club: Party {
var name: String
var location: String
var entryPrice: Double
var guests: [Guest]
var maximumguests: Int
var revenue = 0.0
mutating func entry(visiter: Guest) {
if visiter.money > entryPrice && guests.count < maximumguests {
guests.append(visiter)
visiter.money -= entryPrice
revenue += entryPrice
} else {
stop()
}
GuestCheckUP(guest: visiter)
}
mutating func Bar(guest: Guest, drink: Drink) {
print("\(guest) want to buy a drink")
if guest.money >= drink.price {
guest.money -= drink.price
revenue += drink.price
print("\(guest.name) bought a \(drink.name) for \(drink.price)$, now he/she has \(guest.money)$ in his/her pocket")
} else {
print("\(guest.name) has too less money for a drink!")
}
}
mutating func GuestCheckUP(guest: Guest) {
if guest.onDrugs {
throwOut(visiter: guest)
}
}
mutating func throwOut(visiter: Guest) {
print("\(visiter.name) was throwed out by the security!")
}
func stop() {
print("Stop! No entry!")
}
func Earnings() {
print("The earnings of tonight are \(revenue)$")
}
}
请注意,Guest 是一种协议,而不是一种类型。您应该首先确保在您的来宾协议中声明 money
属性 需要 setter,使您的方法通用并向其添加 inout 关键字:
protocol Guest {
var money: Double { get set }
// your code
}
mutating func entry<T: Guest>(visiter: inout T) {
// your code
}