无法指定类型' UnsafeMutableRawPointer的值!'输入' UIView'

时间:2018-01-19 08:54:00

标签: ios swift unsafemutablepointer

我正在尝试将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 个答案:

答案 0 :(得分:1)

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

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

如果smartPlayerCreatePlayView()返回(+1)保留的对象 引用(作为&#34;创建&#34;在方法名称中指示)然后它 应该是

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

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

用于更多桥接转换,帮助程序功能和链接 在文档中,请参阅How to cast self to UnsafeMutablePointer<Void> type in swift