프로퍼티를 관찰하면서 변경 사항이 발생할 때 실행.
실행 순서 :willSet
>didSet
저장 프로퍼티와 연산 프로퍼티에 추가할 수 있음
didSet
, willSet
didSet
oldValue
라는 이름으로 제공됨.willSet
newValue
라는 이름으로 제공됨.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")
// 출력:
// 잘못된 비밀번호입니다.
// loginAttempts == 1
user.login(with: "wrongpassword")
// 출력:
// 잘못된 비밀번호입니다.
// loginAttempts == 2
user.login(with: "wrongpassword")
// 출력:
// 잘못된 비밀번호입니다.
// loginAttempts == 3
// 로그인 시도가 3회 이상 실패하였습니다. 계정이 잠겼습니다.
// 계정이 잠겼습니다.
// 계정 잠금 해제
user.unlockAccount() // 계정이 잠금 해제되었습니다.
변수나 객체의 타입을 다른 타입으로 변환하는 프로세스
is
lhs is rhs
의 결과를 bool
타입으로 반환함
let char: Character = "A"
print(char is Character) // true
print(char is String) // false
let bool: Bool = true
print(bool is Bool) // true
print(bool is Character) // false
as
, as!
, as?
업 캐스팅 :
as
(하위 클래스 ➡️ 상위 클래스)
다운 캐스팅 :as?
,as!
(상위 클래스 ➡️ 하위 클래스)
as
- 컴파일 단계에서 캐스팅이 실행, 즉 타입 캐스팅이 성공할 경우에만 사용할 수 있음.
- 캐스팅 실패 시 에러가 발생
- 캐스팅하려는 타입이 같은 타입이거나 부모클래스 타입이란 것을 알 때
as
연산자를 사용
as?
nil
을 반환as?
를 사용as!
코드 요소에 대한 외부 접근을 제한 ➡️ 모듈 간의 접근성과 보안을 조절
다른 소스 파일이나 모듈의 코드에서 코드 일부에 대한 접근을 제한함
[제약 적음]open
<public
<internal
<fileprivate
<private
[제약 많음]
open
: 모든 소스 파일에서 해당 level에 접근 가능 + 모든 곳에서 서브클래싱 가능public
: 모든 소스 파일에서 해당 level에 접근 가능 + 같은 모듈 내에서만 서브클래싱 가능internal
: 같은 모듈 내에서만 접근 가능 (default)fileprivate
: 같은 소스 파일 내에서만 접근 가능private
: 클래스 내부에서만 접근 가능
github
, git
git rm --cached ~~.xcuserstate
git commit -m ' Removed file that shouldnt be tracked'
.gitignore
파일을 만든다.*.xcuserstate
구문을 입력한 후 저장한다..gitignore
파일을 생성해주는 사이트가 있었다. 아래에 링크를 첨부하고, 나도 자주 사용하도록 해봐야겠다.