0

我正在尝试将 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'

如何解决这个问题。

4

1 回答 1

2

原始指针和托管对象指针之间的桥接是在 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()

平衡这一点,否则你有内存泄漏。

有关更多桥接转换、辅助函数和文档链接,请参阅如何将 self 转换为 swift 中的 UnsafeMutablePointer<Void> 类型

于 2018-01-19T09:04:54.120 回答