Код IT
← Каталог

История языка Swift — Метапрограммирование — от property wrappers к compile-time macros

Фрагмент из «История языка Swift»: Метапрограммирование — от property wrappers к compile-time macros.

Plain text main.swift
   @propertyWrapper
   struct UserDefault<T> {
       let key: String
       let defaultValue: T
       init(key: String, default defaultValue: T) {
           self.key = key
           self.defaultValue = defaultValue
       }
       var wrappedValue: T {
           get { UserDefaults.standard.value(forKey: key) as? T ?? defaultValue }
           set { UserDefaults.standard.setValue(newValue, forKey: key) }
       }
   }

   class Settings {
       @UserDefault(key: "theme", default: "light") var theme: String
   }
   @propertyWrapper
   struct UserDefault<T> {
       let key: String
       let defaultValue: T
       init(key: String, default defaultValue: T) {
           self.key = key
           self.defaultValue = defaultValue
       }
       var wrappedValue: T {
           get { UserDefaults.standard.value(forKey: key) as? T ?? defaultValue }
           set { UserDefaults.standard.setValue(newValue, forKey: key) }
       }
   }

   class Settings {
       @UserDefault(key: "theme", default: "light") var theme: String
   }