TeamSparker / Spark-iOS

아요는🗿🔪슈슉..슈슉,,,슉...스...스파크🎇
63 stars 6 forks source link

[Refactor] Property Wrapper 사용한 UserDefaults 리펙토링 #629

Open hyun99999 opened 2 years ago

hyun99999 commented 2 years ago

프로퍼티 래퍼 공부 후 다시금 리펙토링을 목표로 함

Originally posted by @hyun99999 in https://github.com/TeamSparker/Spark-iOS/issues/628#issuecomment-1133655022

hyun99999 commented 2 years ago
@propertyWrapper
struct UserDefault<T> {
  let key: String
  let defaultValue: T

  // ✅ Userdefaults 로 값을 찾을 때 없다면, defaultValue 를 반환.
  // 그렇기 때문에 wrappedValue 는 옵셔널이 아님.
  var wrappedValue: T {
    get {
      return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
    }
    set {
      UserDefaults.standard.set(newValue, forKey: key)
    }
  }
}

enum GlobalSettings {
  @UserDefault(key: "FOO_FEATURE_ENABLED", defaultValue: false)
  static var isFooFeatureEnabled: Bool

  @UserDefault<Bool>(key: "BAR_FEATURE_ENABLED", defaultValue: false)
  static var isBarFeatureEnabled
}
hyun99999 commented 2 years ago

swift-evolution/0258-property-wrappers.md at main · apple/swift-evolution

의 코드를 참고하여 프로젝트에 적용