2016-09-20 58 views
1

我想将下面的代码从swift 2升级到3,并且我得到withUnsafePointers is unavailable:使用nesterd withUnsafePointer代替。我已经尝试了一些方法,但我无法做到。他是我的代码withUnsafePointers不可用

var v: LinphoneManager = self 
    var lct: LinphoneCoreVTable = LinphoneCoreVTable() 
     let theLinphoneCore : OpaquePointer = withUnsafePointers(&lct, &v, { (ptr: UnsafePointer<LinphoneCoreVTable>, selfPtr: UnsafePointer<LinphoneManager>) -> OpaquePointer in 

       let voidPtr: UnsafeMutableRawPointer = unsafeBitCast(selfPtr, to: UnsafeMutableRawPointer.self) 
      return linphone_core_new_with_config (ptr, self.configDb!, voidPtr /* user_data */) 
     }) 
+0

你知道了吗?我有这样的事情,已经做了嵌套不安全的指针,但得到了与LECT属性的另一个问题。 –

回答

1

错误消息:

withUnsafePointers不可用:使用嵌套withUnsafePointer代替

手段代替调用withUnsafePointers(它有两个项目,并创建指针给每个人)两个电话withUnsafePointer,一个在对方的封闭,每个拿一个项目,并创建一个指针。

所以这个:

withUnsafePointers(&a, &b) { aPtr, bPtr in 
    // do something with aPtr and bPtr 
} 

变为这样:

withUnsafePointer(&a) { aPtr in 
    withUnsafePointer(&b) { bPtr in 
     // do something with aPtr and bPtr 
    } 
} 
+0

感谢您的回复。我试图将我的原始文件与非安全指针转换为非安全指针,并且我无法正确理解。 – user1079052

+0

然后显示你已经尝试了什么,以及你遇到的问题(错误?不正确的行为?)。 – rickster

+0

@rickster我做了嵌套的unsafepointer,但我遇到了&param的另一个问题。 Canot传递类型'inout T'(aka inout _T')的不可变值作为inout参数。 –

0

我在一个项目我刚刚更新到swift3使用Linphone中。这是我更新这些行。似乎运作良好。希望这可以帮助!

var lct: LinphoneCoreVTable = LinphoneCoreVTable() 
     theLinphoneCore = withUnsafePointer(to: &lct) { (ptr: UnsafePointer<LinphoneCoreVTable>) -> OpaquePointer in 
      let selfPtr: BTVoipService = self 
      let voidPtr: UnsafeMutableRawPointer = unsafeBitCast(selfPtr, to: UnsafeMutableRawPointer.self) 
      return linphone_core_new_with_config (ptr, self.configDb!, voidPtr /* user_data */) 
     }