Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 프로그래머스 배열 만들기1
- n번째 원소까지
- 프로그래머스 자동커밋
- Error installing cocoapods
- 조건에 맞게 수열 변경하기 3
- array
- 프로그래머스 문자열 붙여서 출력하기
- 프로그래머스 문자열 정렬하기 (1)
- ruby설치
- Til
- 스파르타 코딩클럽 내일배움캠프
- 프로그래머스 n의 배수 고르기
- 연산자
- Break
- continue
- 배열 만들기1
- 문자열 정렬하기 (1)
- 프로그래머스 주사위 게임1
- 객체지향
- swift
- 프로그래머스 최댓값 만들기(2)
- 프로그래머스 조건에 맞게 수열 변경하기 3
- 프로그래머스 n번째 원소까지
- 스파르타코딩캠프
- 스페인어
- 주사위 게임1
- 문자열 붙여서 출력하기
- 프로그래머스 암호 해독
- cocoapods 설치 오류
- 프로그래머스
Archives
- Today
- Total
dev._.note
[Swift] didSet 과 willSet 본문
💡 프로퍼티 옵저버
- 변수에 프로퍼티 옵저버를 정의하여 프로퍼티 값의 변경 사항을 모니터링하고, 미리 구현한 코드로 이에 대응가능.
- 다시 말하면 해당 프로퍼티를 관찰(observe)하면서 변경 사항이 발생할 때 실행.
- willSet보다는 didSet이 많이 사용.
- willSet과 didSet을 둘 다 작성했을 경우 willSet이 먼저 실행.
- 추가할 수있는 경우
- 저장 프로퍼티(stored property)
- 연산 프로퍼티(computed property)
📌 didSet
- didSet은 새 값이 저장된 직후에 호출.
- 이전 프로퍼티의 값이 oldValue 로 제공.
📌 willSet
- willSet은 값이 저장되기 직전에 호출.
- 새로운 프로퍼티의 값이 newValue 로 제공.
var myProperty: Int = 20{
didSet(oldVal){
//myProperty의 값이 변경된 직후에 호출, oldVal은 변경 전 myProperty의 값
}
willSet(newVal){
//myProperty의 값이 변경되기 직전에 호출, newVal은 변경 될 새로운 값
}
}
var name: String = "Unknown" {
willSet {
print("현재 이름 = \(name), 바뀔 이름 = \(newValue)")
}
didSet {
print("현재 이름 = \(name), 바뀌기 전 이름 = \(oldValue)")
}
}
name = "Peter"
// willSet이 먼저 실행됨
// 현재 이름 = Unknown, 바뀔 이름 = Peter
// 현재 이름 = Peter, 바뀌기 전 이름 = Unknown
class UserAccount {
var username: String
var password: String
var loginAttempts: Int = 0 {
didSet {
if loginAttempts >= 3 {
print("로그인 시도가 3회 이상 실패하였습니다. 계정이 잠겼습니다.")
lockAccount()
}
}
}
var isLocked: Bool = false {
didSet {
if isLocked {
print("계정이 잠겼습니다.")
} else {
print("계정이 잠금 해제되었습니다.")
}
}
}
init(username: String, password: String) {
self.username = username
self.password = password
}
func login(with enteredPassword: String) {
if enteredPassword == password {
print("로그인 성공!")
loginAttempts = 0 // 로그인 성공 시 로그인 시도 횟수 초기화
} else {
print("잘못된 비밀번호입니다.")
loginAttempts += 1 // 로그인 실패 시 로그인 시도 횟수 증가
}
}
private func lockAccount() {
isLocked = true
}
func unlockAccount() {
isLocked = false
}
}
// 사용자 계정 생성
let user = UserAccount(username: "user123", password: "password123")
// 로그인 시도
user.login(with: "wrongpassword")
// 출력:
// 잘못된 비밀번호입니다.
user.login(with: "wrongpassword")
// 출력:
// 잘못된 비밀번호입니다.
user.login(with: "wrongpassword")
// 출력:
// 잘못된 비밀번호입니다.
// 로그인 시도가 3회 이상 실패하였습니다. 계정이 잠겼습니다.
// 계정이 잠겼습니다.
// 계정 잠금 해제
user.unlockAccount() // 계정이 잠금 해제되었습니다.
'Dev > SWIFT' 카테고리의 다른 글
[Swift] 접근 제한자 (0) | 2023.12.06 |
---|---|
[Swift] 타입 캐스팅(Type Casting) (2) | 2023.12.05 |
[Swift] readLine() (2) | 2023.12.02 |
[Swift] 계산기 만들기 (0) | 2023.12.01 |
[Swift] 초기화(Initialization) (1) | 2023.11.30 |