티스토리 뷰
인스턴스 메소드와 타입메소드, static 메소드와 class 메소드
- 인스턴스 메소드 - 특정 타입의 ‘인스턴스’에서 호출
- 타입 메소드 - ‘특정 타입 자체’에서 호출
- func 앞에 static 또는 class 키워드를 추가해서 선언
- static 메소드와 class 메소드의 차이
- static
- 서브클래스에서 오버라이드 할 수 없음
- class
- 서브클래스에서 오버라이드 할 수 있음
- static
메소드의 호출
- 똑같이 점(.)문법으로 호출 할 수 있음
- 다만, 인스턴스에서 호출하는 것이 아니라 타입에서 호출함
class SomeClass {
class func someTypeMethod() {
// 타입 메소드 구현
}
}
SomeClass.someTypeMethod() // 메소드 호출
타입 메소드 안의 ‘self’
- 타입 메소드 안에서도 ‘self’ 키워드를 사용할 수 있음
- 타입 메소드 안에서의 ‘self’는 인스턴스가 아닌 타입 자신을 의미
- 타입 메소드 안에서 다른 타입메소드 사용할 수 있음
class SomeClass {
class func someTypeMethod() {
// 타입 메소드 구현
}
}
SomeClass.someTypeMethod() // 메소드 호출
struct LevelTracker {
static var highestUnlockedLevel = 1
var currentLevel = 1
static func unlock(_ level: Int) {
if level > highestUnlockedLevel {
highestUnlockedLevel = level
}
}
static func isUnlocked(_ level: Int) -> Bool {
return level <= highestUnlockedLevel
}
// @discardableResult
mutating func advance(to level: Int) -> Bool {
if LevelTracker.isUnlocked(level) {
currentLevel = level
return true
} else {
return false
}
}
}
class Player {
var tracker = LevelTracker()
let playerName: String
func complete(level: Int) {
LevelTracker.unlock(level + 1) // 1 들어오면 highest level 2로 만듦
tracker.advance(to: level + 1) // 1 들어오면 current Level을 2로 만듦
}
init(name: String) {
playerName = name
}
}
var player = Player(name: "Argyrios") // 인스턴스 생성
player.complete(level: 1) // 1단계 성공
print("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)") // "highest unlocked level is now 2"
player = Player(name: "Beto")
if player.tracker.advance(to: 6) {
print("player is now on level 6")
} else {
print("level 6 has not yet been unlocked")
}
// "level 6 has not yet been unlocked" 출력
'programming > Swift' 카테고리의 다른 글
[Swift/iOS] Swift 튜토리얼: MVVM 디자인 패턴의 소개(일부) (0) | 2022.10.26 |
---|---|
[Swift/iOS] 프로토콜 Protocol (1) (0) | 2022.10.25 |
[Swift/iOS] 제네릭(2) (0) | 2022.10.21 |
[Swift/iOS] 제네릭(1) (0) | 2022.10.21 |
[Swift/iOS] 컴파일러 제어 구문 (0) | 2022.10.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- escaping closrue
- ASAuthorizationAppleIDCredential
- authorizationCode
- SWIFT
- autoclosure
- 강한참조순환
- 디자인패턴
- CoreData
- 클로저 축약
- object
- 캡쳐리스트
- inout 파라미터 메모리 충돌
- Entity
- 강한 참조 순환
- 클로저 강한 참조
- ios
- Core Data Stack
- Delegate 패턴
- core data
- 메모리 안정성
- 클로저표현
- weak
- 클로저
- context
- unowned
- 자동클로저
- Persistent Container
- 토큰저장
- 회원가입
- identity Token
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함