class Glass {
var id: Int
init (id: Int) {
self.id = id
}
}
let glass1 = Glass(id: 1)
let glass2 = Glass(id: 2)
struct Cow {
class Stomach {
var food: Glass? = nil
func copy() -> Stomach {
let stomach = Stomach()
stomach.food = food
return stomach
}
}
var stomach = Stomach()
mutating func eat(_ food: Glass) {
if !isKnownUniquelyReferenced(&stomach) {
stomach = stomach.copy()
}
stomach.food = food
}
}
var cow1 = Cow()
cow1.eat(glass1)
let cow2 = cow1
cow1.eat(glass2)
print(cow2.stomach.food?.id)