728x90
반응형
enum에서는 타입 프로퍼티만 사용할 수 있다. 초기화 자체가 안되기 때문에 저장 프로퍼티는 사용할 수 없다.
struct에서는 초기화가 가능하다.
그래서 인스턴스 생성을 못하게 하기 위해서 접근 제한자를 초기화 구문 앞에 붙여서 막는 방법을 사용한다.
struct StoryboardNames {
// 접근제어를 통해 초기화를 막을 수 있음
private init() { }
static let main = "Main"
static let search = "Search"
static let setting = "Setting"
}
그러면 enum에서는 타입 프로퍼티 말고 case를 쓰면 안될까?
움,, 아무래도 case를 쓸 경우에는 rawValue를 중복해서 써줄 수 없다는 불편함이 있다.
Singleton Pattern
싱글톤 패턴을 사용해서 UserDefaults를 써볼거다.
타입 프로퍼티 인스턴스를 하나 만드는데 보통 standard나 shared로 명명한다.
다른 곳에서 인스턴스를 생성할 수 없게끔 접근 제한자를 통해 초기화를 막는다.
class UserDefaultsHelper {
private init() { }
static let standard = UserDefaultsHelper()
let userDefaults = UserDefaults.standard
enum Key: String {
case nickname, age
}
var nickname: String? {
get {
return userDefaults.string(forKey: Key.nickname.rawValue) ?? "대장"
}
set { // 연산 프로퍼티 파라미터
userDefaults.set(newValue, forKey: Key.nickname.rawValue)
}
}
// int는 default값이 0이라서 optional 상관없음
var age: Int {
get {
return userDefaults.integer(forKey: Key.age.rawValue)
}
set {
userDefaults.set(newValue, forKey: Key.age.rawValue)
}
}
}
열거형을 통해 Key값의 케이스를 나누고 문자열 타입을 줘서 rawValue 값 자체로 사용할 수 있게 한다.
nickname이라는 연산 프로퍼티에 값이 저장되고 불러와지고
age의 경우 int이기 때문에 optional을 고려하지 않아도 된다.
실제 사용할 때는 아래처럼 사용하면 된다.
UserDefaultsHelper.standard.nickname = "후리스콜링"
UserDefaultsHelper.standard.age = 25
추후에 내용을 보충해보자..!
728x90
반응형
'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글
[Swift] 일급 객체, Closure (1) (0) | 2022.08.03 |
---|---|
[iOS] Alamofire, SwiftyJSON을 사용해서 HTTP 통신하기 (0) | 2022.08.02 |
[Swift] ReusableViewProtocol로 뷰컨/셀 식별자 사용하기 (0) | 2022.08.02 |
[Swift] Class와 Struct 그리고 부스러기 개념들 (0) | 2022.07.29 |
[Swift] 스위프트 성능 이해하기1 - Struct / Class (0) | 2022.07.29 |