swift - 通过 UnsafeMutableRawPointer 导出 SwiftUI 视图
问题描述
我想以 SwiftUIText
视图的形式返回一个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)'
如何获取 SwiftUIText
对象的底层指针?
解决方案
用你自己的类包装它
@_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
}
}
推荐阅读
- database - LoadRunner 12.00 - 错误:尚未分配服务器句柄 (NULL)
- rest - Java POJO 属性的有意义的数据生成
- excel - 对于每个新循环,for 循环都会变慢
- arrays - 检查关联数组值并将其与 in_array 进行比较?
- ios - IONIC-Cli 5.4.13 Native 中的 Siri 实现
- javascript - 从另一个类 React Native 访问它
- css - text-align:start 和 text-align:unset 有什么区别?
- kubernetes - “kube-node-lease”命名空间有什么用?
- c++ - 如何使用 C++ 和 Boost Asio 从 HTTP 发布请求中获取键值
- spring - 为 v2.2.2 的 Spring Boot 应用启用 Swagger。版本