swift 中的默认 NSButton 值
NSButton value as default in swift
我是 swift 的新手,使用 Xcode 尝试编写一个小型清单应用程序。在我 check/uncheck 复选框并退出应用程序后,下次我重新打开它时状态就会消失。我想知道如何将 NSButton 的当前状态保存为默认状态,以便下次打开该应用程序时,它会显示与我关闭它时相同的状态。我尝试了以下练习:
设置默认值:
@IBAction func Check1(_ sender: NSButton) {
UserDefaults.standard.set(Check1.state, forKey:"Check1status")
}
读取默认值:
override var representedObject: Any? {
didSet {
Check1.state = UserDefaults.standard.bool(forKey:"Check1status")
}
}
但是我收到了错误消息:"Cannot assign value of type 'Bool' to type 'NSControl.StateValue'"
我该如何解决这个错误?谢谢
因为state
不是布尔值。在 Objective-C 中,它是一个整数。在 Swift 中,它是一个 struct,其 rawValue
是一个整数。另外,不要在 representedObject.didSet
中设置状态。在 viewDidLoad
:
中完成
override func viewDidLoad() {
super.viewDidLoad()
// When your app launches for the very first time on the user computer, set it to On
UserDefaults.standard.register(defaults: [
"Check1Status": NSControl.StateValue.on.rawValue
])
let state = NSControl.StateValue(UserDefaults.standard.integer(forKey:"Check1status"))
check1.state = state
}
@IBAction func check1(_ sender: NSButton) {
// Swift performs do some background magic if you type check1.state
// Adding rawValue make it clear that you are writing an integer to the UserDefaults
UserDefaults.standard.set(check1.state.rawValue, forKey:"Check1status")
}
我是 swift 的新手,使用 Xcode 尝试编写一个小型清单应用程序。在我 check/uncheck 复选框并退出应用程序后,下次我重新打开它时状态就会消失。我想知道如何将 NSButton 的当前状态保存为默认状态,以便下次打开该应用程序时,它会显示与我关闭它时相同的状态。我尝试了以下练习:
设置默认值:
@IBAction func Check1(_ sender: NSButton) {
UserDefaults.standard.set(Check1.state, forKey:"Check1status")
}
读取默认值:
override var representedObject: Any? {
didSet {
Check1.state = UserDefaults.standard.bool(forKey:"Check1status")
}
}
但是我收到了错误消息:"Cannot assign value of type 'Bool' to type 'NSControl.StateValue'"
我该如何解决这个错误?谢谢
因为state
不是布尔值。在 Objective-C 中,它是一个整数。在 Swift 中,它是一个 struct,其 rawValue
是一个整数。另外,不要在 representedObject.didSet
中设置状态。在 viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
// When your app launches for the very first time on the user computer, set it to On
UserDefaults.standard.register(defaults: [
"Check1Status": NSControl.StateValue.on.rawValue
])
let state = NSControl.StateValue(UserDefaults.standard.integer(forKey:"Check1status"))
check1.state = state
}
@IBAction func check1(_ sender: NSButton) {
// Swift performs do some background magic if you type check1.state
// Adding rawValue make it clear that you are writing an integer to the UserDefaults
UserDefaults.standard.set(check1.state.rawValue, forKey:"Check1status")
}