无法分配类型“UnsafeMutableRawPointer!”的值输入“UIView”

Posted

技术标签:

【中文标题】无法分配类型“UnsafeMutableRawPointer!”的值输入“UIView”【英文标题】:Cannot assign value of type 'UnsafeMutableRawPointer!' to type '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'

如何解决此问题。

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于无法分配类型“UnsafeMutableRawPointer!”的值输入“UIView”的主要内容,如果未能解决你的问题,请参考以下文章

无法将值类型“()”分配给字符串类型?

无法分配泛型类型的值

错误:无法分配类型“字符串?”的值键入“字符串?。类型”

无法将类型“类”的值分配给类型“[类]”

AppBarDesign 无法分配给参数类型“PreferredSizeWidget”

错误:无法将参数类型“FirebaseApp”分配给参数类型“Firebase”