【问题标题】:Swift bind to Objective-C boolean valueSwift 绑定到 Objective-C 布尔值
【发布时间】:2014-07-21 03:35:30
【问题描述】:

我有一个按钮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?

【问题讨论】:

    标签: macos cocoa swift


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我知道还有其他方法可以实现这一点,但在这种情况下更喜欢绑定。
      • shuffleButton.selected 它返回一个布尔值。然后你可以对这个对象进行类型转换并更新你的 NSUserdefaults。我更新了我的答案。
      • 你也可以将你的值转换为objective-C值。比如,让a:Double = firstText.text.bridgeToObjectiveC().doubleValue
      猜你喜欢
      • 1970-01-01
      • 2016-01-31
      • 2011-01-27
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2011-03-22
      相关资源
      最近更新 更多