在Swift中,&符号&
用于inout
个参数。喜欢
var value = 3
func inoutfunc(inout onlyPara:Int){
onlyPara ++
}
inoutfunc(& value)//值现在为4
这看起来不像onlyPara
是一个指针,也许就是在函数内部使用它时立即取消引用。
OnlyPara是指针吗?
当我不需要IntPointer
类型时,为什么框架方法使用NSErrorPointer
类型?因为它们无法更改方法,因为现有的Objective-C代码?
但为什么然后Swift将&error
转换为NSErrorPointer
,是自动装箱了吗?
var errorPtr:NSErrorPointer =& error
当我有NSErrorPointer
时。 如何取消引用?
var error:NSError = * errorPtr //将无效
也许有人可以开导我。仅使用Swift很容易。我认为这些问题是swift和Objective-C之间&
的一大块知识(作为运算符的地址)
答案 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 { ... }