reference
Passed by reference
inheritance
주소를 공유 즉, 하나의 개체
class Enemy {
var health: Int
var attackStrength: Int
init(health: Int, attackStrength: Int){
self.health = health
self.attackStrength = attackStrength
}
func takeDamage(amount: Int){
health = health - amount
}
func move() {
print("Walk forwards.")
}
func attack() {
print("Land a hit, does \(attackStrength) damage.")
}
}
//inheritance ↓ (상속)
class Dragon: Enemy {
var wingSpan = 2
func talk(speech: String) {
print("Says: \(speech)")
}
override func move() { // move() == from Enemy Class so, override
print("Fly forward")
}
override func attack() {
super.attack()
print("Spits fire, does 10 damage")
}
}
let skeleton1 = Enemy(health: 100, attackStrength: 10)
let skeleton2 = skeleton1
skeleton1.takeDamage(amount: 10)
skeleton1.takeDamage(amount: 10)
skeleton2.takeDamage(amount: 10)
print(skeleton1.health) //result = 70
print(skeleton2.health) //result = 70
immutable
copy
Passed by Value
값을 복사함 즉, 각각의 개체를 만들 수 있다
struct Enemy {
var health: Int
var attackStrength: Int
init(health: Int, attackStrength: Int){
self.health = health
self.attackStrength = attackStrength
}
mutating func takeDamage(amount: Int){
health = health - amount
}
func move() {
print("Walk forwards.")
}
func attack() {
print("Land a hit, does \(attackStrength) damage.")
}
}// can't inheritance ↓ (상속불가)
//class Dragon: Enemy {
// var wingSpan = 2
//
// func talk(speech: String) {
// print("Says: \(speech)")
// }
// override func move() { // move() == from Enemy Class so, override
// print("Fly forward")
// }
// override func attack() {
// super.attack()
// print("Spits fire, does 10 damage")
// }
//}
var skeleton1 = Enemy(health: 100, attackStrength: 10)
var skeleton2 = skeleton1
skeleton1.takeDamage(amount: 10)
skeleton1.takeDamage(amount: 10)
skeleton2.takeDamage(amount: 10)
print(skeleton1.health) //result = 80
print(skeleton2.health) //result = 90