这个NSErrorPointer类型是什么?

时间:2014-06-27 08:44:23

标签: pointers swift ampersand

  1. 在Swift中,&符号&用于inout个参数。喜欢

      

    var value = 3

         

    func inoutfunc(inout onlyPara:Int){

         

    onlyPara ++

         

    }

         

    inoutfunc(& value)//值现在为4

    这看起来不像onlyPara是一个指针,也许就是在函数内部使用它时立即取消引用。 OnlyPara是指针吗?

  2. 当我不需要IntPointer类型时,为什么框架方法使用NSErrorPointer类型?因为它们无法更改方法,因为现有的Objective-C代码?

  3. 为什么然后Swift将&error转换为NSErrorPointer ,是自动装箱了吗?

      

    var errorPtr:NSErrorPointer =& error

  4. 当我有NSErrorPointer时。 如何取消引用?

      

    var error:NSError = * errorPtr //将无效


  5. 也许有人可以开导我。仅使用Swift很容易。我认为这些问题是swift和Objective-C之间&的一大块知识(作为运算符的地址)

3 个答案:

答案 0 :(得分:7)

解决方案4.我发现了如何取消引用它:

var error: NSError = errorPtr.memory!

答案 1 :(得分:5)

我建议你阅读使用Swift with Cocoa和Objective-C指南的指针部分:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_16

指针部分底部有一个表,它解释了类指针如何桥接到Swift指针类型。基于此,NSError指针应为AutoreleasingUnsafePointer<NSError>。搜索NSErrorPointer的标题会产生以下结果:

typealias NSErrorPointer = AutoreleasingUnsafePointer<NSError?>

为什么?之后的额外NSError?我想这是因为NSError也可以是nil

希望它有所帮助!

答案 2 :(得分:2)

Swift 3

var errorPtr: NSErrorPointer = nil
callSomeFunctionThatReceivesParamByReference(.., error: errorPtr)
if let error = errorPtr?.pointee { ... }