【问题标题】:Cannot assign value of type 'UnsafeMutableRawPointer!' to type 'UIView'无法分配类型“UnsafeMutableRawPointer!”的值输入“UIView”
【发布时间】:2018-01-19 08:54:00
【问题描述】:

我正在尝试将 Objective-C 源代码转换为 Swift。

Objective-C 中的以下代码

myView = (__bridge UIView *)([SmartPlayerSDK SmartPlayerCreatePlayView:0 y:0 width:screenWidth height:playerHeight]);

其中myViewUIView

我正在使用一个库,函数如下所示,

+ (void*)SmartPlayerCreatePlayView:(NSInteger)x y:(NSInteger)y width:(NSInteger)width height:(NSInteger)height;

它返回地址。

我正在尝试转换为 Swift

myView = SmartPlayerSDK.smartPlayerCreatePlayView(0, y: 0, width: 10, height: 10)

smartPlayerCreatePlayView - Automatically convert to small letter

出现错误:-Cannot assign value of type 'UnsafeMutableRawPointer!' to type 'UIView'

如何解决此问题。

【问题讨论】:

    标签: ios swift unsafemutablepointer


    【解决方案1】:

    完成了原始指针和托管对象指针之间的桥接 在 Swift 中使用 Unmanaged 类型。在你的情况下,相当于 代码将是

    let rawPointer = SmartPlayerSDK.smartPlayerCreatePlayView(0, y: 0, width: 10, height: 10)
    let view = Unmanaged<UIView>.fromOpaque(rawPointer).takeUnretainedValue()
    

    如果smartPlayerCreatePlayView() 返回一个 (+1) 保留对象 参考(如方法名称中的“创建”所示)然后它 应该是

    let view = Unmanaged<UIView>.fromOpaque(rawPointer).takeRetainedValue()
    

    平衡它,否则你有内存泄漏。

    更多桥接转换、辅助函数和链接 有关文档,请参阅How to cast self to UnsafeMutablePointer<Void> type in swift

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 1970-01-01
      • 2021-09-25
      • 2018-10-11
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多