小编Tor*_*ora的帖子

如何在Swift 4中使用Smart KeyPaths进行键值观察?

你能帮我看看如何在NSArrayController使用Smart KeyPaths修改内容时收到通知吗?

灵感来自

键值观察:https: //developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID12

Smart KeyPaths:为Swift提供更好的键值编码:https: //github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md

我模仿了文章的示例代码.

class myArrayController: NSArrayController {
  required init?(coder: NSCoder) {
    super.init(coder: coder)

    observe(\.content, options: [.new]) { object, change in
      print("Observed a change to \(object.content.debugDescription)")
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,这是行不通的.对目标对象所做的任何更改都不会触发通知.

相比之下,下面列出的典型方法是有效的.

class myArrayController: NSArrayController {
  required init?(coder: NSCoder) {
    super.init(coder: coder)

    addObserver(self, forKeyPath: "content", options: .new, context: nil)
  }

  override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if …
Run Code Online (Sandbox Code Playgroud)

key-value-observing swift swift4

8
推荐指数
1
解决办法
6452
查看次数

@objc动态变量在Swift 4中是什么意思

您能否简要解释@objcdynamic使用Xcode中的9.x斯威夫特4是什么意思?

通过尝试和错误以及stackoverflow中的后续文章,我终于实现了此代码片段的工作。但我想对这些神奇的关键字有所了解。

在此处输入图片说明

class SampleViewController: NSViewController {

  @objc class Parameters : NSObject {
    @objc dynamic var value1: Double = 0  // bound to Value of a NSTextfield with NumberFormatter
    @objc dynamic var value2: Double = 0  // as "parameters.value1" for the Model Key Path
  }

  @objc dynamic var parameters = Parameters()

  @objc dynamic var value3: Double {  // in the similar way as "value3" for the Model Key Path
    get {
      return parameters.value1 + parameters.value2
    }
  } …
Run Code Online (Sandbox Code Playgroud)

dynamic swift4

8
推荐指数
2
解决办法
5712
查看次数

标签 统计

swift4 ×2

dynamic ×1

key-value-observing ×1

swift ×1