我想返回一个 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/