2014-06-27 39 views
4
  1. 在Swift中,&符号&用于inout参数。像这是什么NSErrorPointer类型?

    var value = 3

    func inoutfunc(inout onlyPara: Int) {

    onlyPara++

    }

    inoutfunc(&value) // value is now 4

    这看起来并不像onlyPara是一个指针,不知是不是和使用功能的内部时,立即得到解除引用。 仅仅是一个指针?

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

  3. 为什么那么斯威夫特转换&errorNSErrorPointer,是,autoboxed?

    var errorPtr: NSErrorPointer = &error

  4. 当我有一个NSErrorPointer我如何解除引用?

    var error: NSError = *errorPtr // won't work


也许有人可以赐教。只使用Swift很容易。我认为,问题是在迅速和Objective-C之间&知识的一个块(如运营商的地址),我建议你阅读使用斯威夫特与可可和Objective-C引导指针部分

+0

你读过[输入 - 输出参数(https://developer.apple.com /library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html)从*斯威夫特编程语言*? – Kreiri

+0

是在SWIFT只(有就不需要NSErrorPointer吧?)很容易,但是当使用'&'等 – Binarian

+3

NSErrorPointer不说什么(例如3 :)为什么NSError自动成为NSErrorPointer, https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns:其用法在“错误报告”,在“使用雨燕与可可和Objective-C”书中描述。 HTML。 –

回答

5

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_16

有一个在指针部分的底部,这也解释了一个表如何类指针桥斯威夫特指针类型。基于此,NSError指针应该是AutoreleasingUnsafePointer<NSError>。搜索药谷NSErrorPointer头产生这样的:

typealias NSErrorPointer = AutoreleasingUnsafePointer<NSError?> 

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

希望它有帮助!

+0

但是,如何与&符号的NSError自动转换为NSErrorPointer?“&”是否表示地址?我没有在Swift中读过。 – Binarian

+2

Swift中没有实际的指针。一切都是一个对象。 &基本上是指: '创建一个类型为AutoreleasingUnsafePointer的对象,其中Type是由&运算符引用的对象的类型。' 生成的对象包含指向您引用的对象内存的类型和实际指针。你没有直接访问指针,但他们给你一个很好的对象来处理。 –

+1

这是一个很好的解释。因此,'inout'关键字创建了这个'AutoreleasingUnsafePointer',但让我们在'func'中使用实际对象'NSError'而不是参数('&NSError')。这非常聪明。我越来越喜欢Swift。 – Binarian

7

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

var error: NSError = errorPtr.memory! 
2

斯威夫特3

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

可以不添加“?”在NSErrorPointer之后? – Binarian