无法分配类型“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]);
其中myView
是UIView
我正在使用一个库,函数如下所示,
+ (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”的主要内容,如果未能解决你的问题,请参考以下文章