728x90
1. 개요
deinit키워드를 사용
일반적으로 Swift가 자원의 해제를 자동으로 알아서 해주는데 사용자가 자원 해지를 위해 수동으로 작업 해야하는 경우도 있습니다
클래스 인스턴스가 소멸되기 직전에 호출 ( 자동으로 호출됨 )
디이니셜라이저는 클래스당 오직 하나만 선언할 수 있고 파라미터를 받을 수 없습니다
부모의 디이니셜라이저는 자식클래스에서 선언하지 않아도 자동으로 호출된다.
2. 사용
class Bank {
//은행안의 기본 코인 10000 _ 는 천단위 구분하기 위하여 넣은 것.
static var coinsInBank = 10_000
// 코인 배포 함수
// 플레이어가 코인 100을 요청하면
static func distribute(coins numberOfCoinsRequested: Int) -> Int {
// 은행이 가진 코인과 , 요청 코인 중의 최소값을 분배함.
// 즉, 은행이 가진 돈이 0일 시에 0을 리턴 (분배될 코인)
let numberOfCoinsToVend = min(numberOfCoinsRequested, coinsInBank)
// 은행코인 = 은행코인 - 분배될 코인
coinsInBank -= numberOfCoinsToVend
// 분배될 코인 리턴
return numberOfCoinsToVend
}
// 코인 받는 함수
// 플레이어가 게임종료시 은행에 돌려준다.
static func receive(coins: Int) {
coinsInBank += coins
}
}
class Player {
var coinsInPurse: Int
// 플레이어가 초기에 은행에 분배받아 시작할 돈
init(coins: Int) {
coinsInPurse = Bank.distribute(coins: coins)
}
// 승리시 분배 받기
func win(coins: Int) {
coinsInPurse += Bank.distribute(coins: coins)
}
// 종료시 남은돈 은행에주기
deinit {
Bank.receive(coins: coinsInPurse)
}
}
/
var playerOne: Player? = Player(coins: 100)
print("A new player has joined the game with \(playerOne!.coinsInPurse) coins")
// Prints "A new player has joined the game with 100 coins"
// 사용자는 100 코인을 갖고 시작합니다.
print("There are now \(Bank.coinsInBank) coins left in the bank")
// Prints "There are now 9900 coins left in the bank"
// 현 시점에 은행은 9900의 코인을 소유하고 있습니다.
playerOne!.win(coins: 2_000)
print("PlayerOne won 2000 coins & now has \(playerOne!.coinsInPurse) coins")
// Prints "PlayerOne won 2000 coins & now has 2100 coins"
// 사용자가 게임에 이겨 2000코인을 받아
// 처음에 갖고 있던 100 코인과 더불어 현재 총 2100 코인을 소유하게 됩니다.
print("The bank now only has \(Bank.coinsInBank) coins left")
// Prints "The bank now only has 7900 coins left"
// 사용자에게 2100 코인을 나눠준 은행에는 현재 7900 코인이 남았습니다.
// 게임 종료
playerOne = nil
print("PlayerOne has left the game")
// Prints "PlayerOne has left the game"
// 사용자가 게임에서 나갔습니다.
print("The bank now has \(Bank.coinsInBank) coins")
// 은행은 사용자가 반납한 2100코인을 합쳐 10000코인이 있다.
2021.03.21 - [공부/SWIFT] - [SWIFT] 이니셜라이저(생성자, initializer)
'공부 > SWIFT' 카테고리의 다른 글
[SWIFT] 이니셜라이저(생성자, initializer) (0) | 2021.03.21 |
---|---|
[SWIFT] 프로퍼티(타입 프로퍼티) ★★★ (0) | 2021.03.11 |
[SWIFT] 프로퍼티( 프로퍼티 옵저버 ) ★★★ (0) | 2021.03.11 |
[SWIFT] 프로퍼티( 저장 프로퍼티 ) ★★★ (0) | 2021.03.11 |
[SWIFT] 프로퍼티( 연산 프로퍼티 ) ★★★ (0) | 2021.03.11 |