在Swift 3中,我声明一个计算属性,它总是返回一个非零正值。该属性存储在UserDefaults中(这意味着它将在应用程序第一次运行时为零):
var notificationInterval: TimeInterval {
get {
let interval = UserDefaults(suiteName: "groupName")?.double(forKey: "notificationInterval") as TimeInterval?
if interval == nil || interval! <= 0 {
notificationInterval = defaultInterval
return notificationInterval
} else {
return interval!
}
}
set {
UserDefaults(suiteName: "groupName")?.set(newValue, forKey: "notificationInterval")
}
}
第6和第7行:
notificationInterval = defaultInterval
return notificationInterval
我收到以下错误:
Attempting to access 'notificationInterval' within its own getter.
我理解错误,但我如何以不同的方式设计?我正在访问该物业&#34;在其自己的吸气剂中#34;故意。
答案 0 :(得分:0)
检查设置器中的正确数据,如
var notificationInterval: TimeInterval {
get {
if let interval = UserDefaults(suiteName: "groupName")?.double(forKey: "notificationInterval") as? TimeInterval {
return interval
} else {
return defaultInterval
}
}
set {
if let interval = newValue, interval <= 0 {
UserDefaults(suiteName: "groupName")?.set(defaultInterval , forKey: "notificationInterval")
} else {
UserDefaults(suiteName: "groupName")?.set(newValue, forKey: "notificationInterval")
}
}
}
答案 1 :(得分:0)
要修复警告,只需替换
notificationInterval = defaultInterval
return notificationInterval
带
return defaultInterval
...这意味着它将在应用首次运行时为零
您可以使用register
功能注册默认值,以便在程序第一次运行时从UserDefaults
获取。
let dict: [String: Any] = ["notificationInterval": 5.0]
UserDefaults.standard.register(defaults: dict)
let interval = UserDefaults.standard.double(forKey: "notificationInterval")
// interval = 5