kotlin - 如何在Kotlin/Native中使用UnsafeMutableRawPointer?

标签 kotlin kotlin-multiplatform kotlin-native

我正在尝试为使用Kotlin / Native编写的多平台库的iOS部分中给定键的UserDefaults更改实现观察者。我需要实现的功能的Swift签名是:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)

但是似乎Kotlin / Native端没有UnsafeMutableRawPointer的映射。

我该如何实现?我想移植到Kotlin的代码快速代码如下:

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")");
}

最佳答案

正如我在文档中发现的那样,objt_code方法的Objective-C版本将observeValue类型的参数用作void *。此类型已作为context映射到Kotlin / Native(请参阅this文档的指针类型子节)。没有COpaquePointer表示,因为K / N当前仅提供与Objective-C的互操作性。

关于kotlin - 如何在Kotlin/Native中使用UnsafeMutableRawPointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60771835/

相关文章:

android - Kotlin 执行可选 Action

kotlin - 如果需要 bool 和可空检查,如何简化此kotlin代码?

android - 更改 MotionLayout 中嵌套布局的尺寸

android - 如何将第三方 iOS pod 库添加到 kotlin 原生项目中?收到错误 "SharedCode:cinteropAFNetworkingIos failed"

web-frameworks - 是否有适用于 kotlin 原生的 Web 框架

ios - 在 iOS 中与调用者相同的线程上运行回调

kotlin - 在 Kotlin 中,术语 Coroutine 和 Continuation 有什么区别?

kotlin - 如何在 Kotlin Multiplatform 中使用 BigDecimal?

android-studio - Kotlin Multiplatform Mobile:条目名称 'META-INF/androidx.vectordrawable_vectordrawable.version'发生冲突

Kotlin/Native 基本图像处理