gpt4 book ai didi

IOS-SWIFT-如何解决 Apple 文档代码中关于 KVO 的警告?为什么 Xcode 自动更正会引入错误?

转载 作者:行者123 更新时间:2023-11-28 14:15:56 24 4
gpt4 key购买 nike

为了学习KVO,我从https://developer.apple.com/documentation/swift/cocoa_design_patterns/using_key_value_observing_in_swift复制了代码.如下

 class MyObjectToObserve: NSObject {
@objc dynamic var myDate = NSDate(timeIntervalSince1970: 0) // 1970
func updateDate() {
myDate = myDate.addingTimeInterval(Double(2 << 30)) // Adds about 68 years.
}
}

class MyObserver: NSObject {
@objc var objectToObserve: MyObjectToObserve
var observation: NSKeyValueObservation?

init(object: MyObjectToObserve) {
objectToObserve = object
super.init()

observation = observe(
\.objectToObserve.myDate,
options: [.old, .new]
) { object, change in
print("myDate changed from: \(change.oldValue!), updated to: \(change.newValue!)")
}
}
}

let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)

observed.updateDate()

倒数第二行将导致警告,因为未使用 observer。在我按照 Xcode 的建议将 let observer 替换为 _ 之后,警告消失了,但它会给出运行时错误:

线程 1:EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)

我的目标是得到以下问题的答案:

1.有谁知道为什么会报错?

2.警告如何解决?

3.这个例子对于 Swift 中的 KVO 是最新的吗?语法级别?

最佳答案

Apple 文档中的代码片段仅作为示例 - 这不是完整的实现。

据推测,您将使用 observer 执行其他操作,此时您将不再收到“未使用”警告。

示例用法(仅用于演示,不被视为生产代码):

class ExampleViewController: UIViewController {

var observed: MyObjectToObserve!
var observer: MyObserver!

override func viewDidLoad() {
super.viewDidLoad()

observed = MyObjectToObserve()
observer = MyObserver(object: observed)

}

@IBAction func didTap(_ sender: Any) {
observed.updateDate()
}

}

创建一个新的 View Controller ;将其类设置为 ExampleViewController;添加一个按钮并将其连接到 @IBAction func didTap

运行应用程序。每次点击按钮时,您都会在调试控制台中看到 print() 输出。

关于IOS-SWIFT-如何解决 Apple 文档代码中关于 KVO 的警告?为什么 Xcode 自动更正会引入错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52191675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com