如何在 Kotlin/Native 中使用 UnsafeMutableRawPointer?
How to use UnsafeMutableRawPointer in Kotlin/Native?
我正在尝试对用 Kotlin/Native 编写的多平台库的 iOS 部分中给定键的 UserDefaults 的更改实施观察器。我需要实现的函数的 Swift 签名是:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
但是 UnsafeMutableRawPointer
的 Kotlin/Native 端似乎没有映射。
我怎样才能做到这一点?我想移植到 Kotlin 的代码 swift 代码如下:
let globalDataStore = UserDefaults(suiteName: "global")
func setObserver() {
globalDataStore?.addObserver(self, forKeyPath: "StringKey", options: NSKeyValueObservingOptions.new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print("observeValue: \(change?[NSKeyValueChangeKey.newKey] ?? "NO VLAUE")");
}
正如我在文档中发现的那样,observeValue
方法的 Objective-C 版本使用 void *
类型参数作为 context
。此类型作为 COpaquePointer
映射到 Kotlin/Native(请参阅 this 文档的 指针类型 小节)。没有 UnsafeMutableRawPointer
表示,因为 K/N 目前仅提供与 Objective-C 的互操作性。
我正在尝试对用 Kotlin/Native 编写的多平台库的 iOS 部分中给定键的 UserDefaults 的更改实施观察器。我需要实现的函数的 Swift 签名是:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
但是 UnsafeMutableRawPointer
的 Kotlin/Native 端似乎没有映射。
我怎样才能做到这一点?我想移植到 Kotlin 的代码 swift 代码如下:
let globalDataStore = UserDefaults(suiteName: "global")
func setObserver() {
globalDataStore?.addObserver(self, forKeyPath: "StringKey", options: NSKeyValueObservingOptions.new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print("observeValue: \(change?[NSKeyValueChangeKey.newKey] ?? "NO VLAUE")");
}
正如我在文档中发现的那样,observeValue
方法的 Objective-C 版本使用 void *
类型参数作为 context
。此类型作为 COpaquePointer
映射到 Kotlin/Native(请参阅 this 文档的 指针类型 小节)。没有 UnsafeMutableRawPointer
表示,因为 K/N 目前仅提供与 Objective-C 的互操作性。