Swift绑定到Objective-C布尔值

时间:2014-07-21 03:35:31

标签: macos cocoa swift

我有一个按钮shuffleButton,您可以点击以切换随机播放。

由于我想在应用关闭时存储该属性,因此我将自定义属性selected绑定到Bool,从shuffleButton绑定到用户默认值。

shuffleButton.bind("selected", toObject: NSUserDefaultsController.sharedUserDefaultsController(), withKeyPath: "values.shuffle", options: nil)

这只是一种方式。如果我设置了用户默认属性,则按钮会更新。

NSUserDefaults.standardUserDefaults().setValue(true, forKey: "shuffle")

// test it out
println(NSUserDefaults.standardUserDefaults().valueForKey("shuffle"))
=> 1
println(shuffleButton.selected)
=> true

但是,如果我更新按钮上的selected属性,则不会更新用户默认值。

shuffleButton.selected = true

// test it out
println(NSUserDefaults.standardUserDefaults().valueForKey("shuffle"))
=> 0
println(shuffleButton.selected)
=> true

知道为什么吗? Swift Bool值是否未正确桥接到Objective-C?

2 个答案:

答案 0 :(得分:1)

尝试使用setBool设置bool值,因为bool不是一个对象,这就是为什么iOS提供此方法来保存bool值。 你不需要桥接shuffleButton.selected将接受swift bool值,一切都用swift语言重写(检查类引用)以下样本工作正常

    let defs = NSUserDefaults.standardUserDefaults();
    var k = true;
    defs.setBool(k, forKey: "bool");
    defs.setDouble(2.5, forKey: "foo");
    defs.synchronize();
    var ud = defs.doubleForKey("foo");
       var bo = defs.boolForKey("bool");
    println("default = \(ud) bool =\(bo)");
    shuffleButton.selected = bo;

答案 1 :(得分:0)

当您更新(更改值)SuffleButton时,还会更新您的NSUserdefault。

  shuffleButton.selected = true

 NSUserDefaults.standardUserDefaults().setBool(shuffleButton.selected as Bool!, forKey: "shuffle")
 NSUserDefaults.standardUserDefaults().synchronize()