swift - 通过 UnsafeMutableRawPointer 导出 SwiftUI View

标签 swift pointers swiftui ffi unsafemutablepointer

我想返回一个 SwiftUI Text查看为 UnsafeMutableRawPointer , 遵守 C 调用约定,因此其他语言可以 FFI 进入它使用。

@_cdecl("hi")
func hi (txt: UnsafeMutablePointer<CChar>) -> () {
   var view = ViewBuilder.buildBlock(Text(String(cString: txt)))
   return UnsafeMutableRawPointer(Unmanaged.passUnretained(view).toOpaque())
}

但是我收到以下错误:

Cannot invoke 'passUnretained' with an argument list of type '(Text)'

如何获取 SwiftUI 的底层指针 Text对象?

最佳答案

用自己的类包装

@_cdecl("hi")
func hi (txt: UnsafeMutablePointer<CChar>) -> UnsafeMutableRawPointer {
   let view = ViewBuilder.buildBlock(Text(String(cString: txt)))
    return UnsafeMutableRawPointer(Unmanaged.passUnretained(Wrapper(text: view)).toOpaque())
}

final class Wrapper {
    let text: Text
    init(text: Text) {
        self.text = text
    }
}

关于swift - 通过 UnsafeMutableRawPointer 导出 SwiftUI View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851259/

相关文章:

ios - 未调用 AVCaptureMetadataOutputObjectsDelegate 方法

c - 为什么指向指针的指针与指向数组的指针不兼容?

c - 解释 "About size_t and ptrdiff_t"中的这段话

ios - 当ViewModel获取新数据时, View 未更新

ios - UICollectionView - 如何使用一个单元格的更改更新所有单元格

Swift:导航栏中带有小 TitleView 的 SegmentedControl

swift - iOS Deep Link 不会从 AppDelegate 调用任何函数

java - 传递参数使指针来自整数,而不需要从 printf 进行强制转换调用

ios - Swift UI 生命周期 : how to replace the current view with a new one ? 不只是简单地推送它

ios - SwiftUI:如何在推送另一个 View 之前获取列表中的选定行