【问题标题】:Export SwiftUI View via UnsafeMutableRawPointer通过 UnsafeMutableRawPointer 导出 SwiftUI 视图
【发布时间】:2020-03-10 02:03:49
【问题描述】:

我想返回一个 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 对象的底层指针?

【问题讨论】:

    标签: swift pointers swiftui ffi unsafemutablepointer


    【解决方案1】:

    用你自己的类包装它

    @_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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2020-04-16
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多