• Yutaro Muta @yutailang0119
• Hatena Co., Ltd. @Kyoto
• Conference Staff
• builderscon 2017, 2018, 2019
• try! Swift Tokyo 2019, 2020
• try! Swift Tokyo 2020 νέοτൢച։࢝
• https://www.tryswift.co/events/2020/tokyo/en/
Who am I ?
Property Wrapper x UserDefaults
• [WWDC 2019] What's New in Swift
• https://developer.apple.com/videos/play/wwdc2019/402
• UserDefaultsΛWrapͯ͠ɺϘΠϥʔϓϨʔτΛ௵͍ͯ͘͠
Slide 15
Slide 15 text
@propertyWrapper
struct UserDefault {
let key: String
let defaultValue: T
init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
UserDefaults.standard.register(defaults: [key: defaultValue])
}
var wrappedValue: T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
Property Wrapper x UserDefaults
Slide 16
Slide 16 text
@UserDefault("USES_TOUCH_ID", defaultValue: false)
static var usesTouchID: Bool
@UserDefault("LOGGED_IN", defaultValue: false)
static var isLoggedIn: Bool
if !isLoggedIn && usesTouchID {
!authenticateWithTouchID()
}
Property Wrapper x UserDefaults
Slide 17
Slide 17 text
defaultValue == nil
Ͱ͖ͦ͏ͩͳ
Slide 18
Slide 18 text
@propertyWrapper
struct UserDefault {
let key: String
let defaultValue: T
init(_ key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
return UserDefaults.standard.object(forKey: key) as? T ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
Property Wrapper x UserDefaults x Optional
Slide 19
Slide 19 text
@UserDefault("USES_TOUCH_ID", defaultValue: nil)
static var usesTouchID: Bool
@UserDefault("LOGGED_IN", defaultValue: false)
static var isLoggedIn: Bool
if !isLoggedIn && usesTouchID {
!authenticateWithTouchID()
}
Property Wrapper x UserDefaults x Optional
Slide 20
Slide 20 text
@UserDefault("USES_TOUCH_ID", defaultValue: nil)
static var usesTouchID: Bool
@UserDefault("LOGGED_IN", defaultValue: false)
static var isLoggedIn: Bool
if !isLoggedIn && usesTouchID {
!authenticateWithTouchID()
}
Property Wrapper x UserDefaults x Optional