Как использовать UnsafeMutableRawPointer в Kotlin / Native? - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь внедрить наблюдателя в изменения UserDefaults для данного ключа в iOS части многоплатформенной библиотеки, написанной с помощью Kotlin / Native. Свифт сигнатуры функции, которую мне нужно реализовать:

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

1 Ответ

3 голосов
/ 20 марта 2020

Как я обнаружил в документации, версия observeValue метода Objective- C использует void * типизированный аргумент как context. Этот тип отображается на Kotlin / Native как COpaquePointer (см. this do c ' Pointer types подраздел). Представление UnsafeMutableRawPointer отсутствует, поскольку в настоящее время K / N обеспечивает совместимость только с Objective- C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...