티스토리 뷰

IOS/swift

Property wrapper (UserDefaults 적용)

내일도이렇게 2022. 3. 5. 12:17

Property Wrapper 

Swift 5.1 에서 추가된 기능으로  getter 와 setter 로직을 포함하고 있는 프로퍼티를 재사용할 수 있게 만들어 줄 수 있다. 

(프로퍼티는 클래스, 구제체, 열거형) 


 

UserDefaulf 를 사용하다보면 아래와 같이 getter 와 setter가 중복코드가 발생한다. 

class UserManager {
    
    
    static var idtoken : String? {
        get { return UserDefaults.standard.string(forKey: "idtoken")}
        set { UserDefaults.standard.set(newValue, forKey: "idtoken")}
    }

    static var uid : String? {
        get { return UserDefaults.standard.string(forKey: "uid")}
        set { UserDefaults.standard.set(newValue, forKey: "uid")}
    }
    

    static var nickName : String? {
        get { return UserDefaults.standard.string(forKey: "nickName") }
        set { UserDefaults.standard.set(newValue, forKey: "nickName")}
    }
    
  
 }

 

Property Wrapper 를 이용해 중복코드를 아래와 같이 제거할 수 있다. 

@propertyWrapper
struct UserDefault<T> {
    
    let key: String
    let defaultValue: T
    let userDefaults: UserDefaults
    
    var wrappedValue: T {
        get { self.userDefaults.object(forKey: self.key) as? T ?? self.defaultValue }
        set { self.userDefaults.set(newValue, forKey: self.key) }
    }
    
    init(key: String, defaultValue: T, userDefaults: UserDefaults = .standard ) {
        self.key = key
        self.defaultValue = defaultValue
        self.userDefaults = userDefaults
    }
}

 

class UserManager {
    
    @UserDefault(key:"idtoken", defaultValue: nil)
    static var idtoken: String?
    
    @UserDefault(key:"uid", defaultValue: nil)
    static var uid: String?
    
    @UserDefault(key:"nickName", defaultValue: nil)
    static var nickName: String?
 }

 


Reference 

https://zeddios.tistory.com/1221

 

'IOS > swift' 카테고리의 다른 글

[Swift] Optional  (0) 2022.03.22
[Swift] Codable  (0) 2022.03.22
Result Type  (0) 2022.03.03
[Swift] lazy  (0) 2022.03.01
[Swift] class & struct  (0) 2022.02.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함