&(内存中的地址)是 Swift 中的运算符还是我在使用 C?
Is the & (Address in Memory) an operator in Swift or am I using C?
所以我正在研究 Ales Tsurko,[并且需要] Swift Chris Adamson 的 CoreAudio 示例的转换。但是,我遇到了一些我似乎无法找到直接答案的问题。
在示例中有这样的内容:
var theErr = noErr
var dictionarySize: UInt32 = 0
var isWritable: UInt32 = 0
theErr = AudioFileGetPropertyInfo(
audiofile,
kAudioFilePropertyInfoDictionary,
&dictionarySize,
&isWritable
)
我很好奇的是“&”(与号)运算符的使用。
现在,在普通的 C 系列语言中,this 指的是变量的内存地址,这里似乎就是这样做的。
令我困惑的是我在第四行写的是 Swift 还是 C 代码?
我知道您混合了 Obj-C 和 Swift,但我在 Swift 文档中找不到任何关于将 & 作为内存运算符使用的文档。那么这种使用是否没有记录,或者如果我暂时离开 Swift 进入 C/Obj-C 与那条线?
谢谢
来自the Apple documentation on Swift:
When a function is declared as taking an UnsafeMutablePointer
argument, it can accept the same operands as
UnsafeMutablePointer for any type Type.
If you have declared a function like this one:
func takesAMutableVoidPointer(x: UnsafeMutablePointer<Void>) {
// ...
}
You can call it in any of the following ways:
var x: Float = 0.0, y: Int = 0
var p: UnsafeMutablePointer<Float> = nil, q: UnsafeMutablePointer<Int> = nil
var a: [Float] = [1.0, 2.0, 3.0], b: [Int] = [1, 2, 3]
takesAMutableVoidPointer(nil)
takesAMutableVoidPointer(p)
takesAMutableVoidPointer(q)
takesAMutableVoidPointer(&x)
takesAMutableVoidPointer(&y)
takesAMutableVoidPointer(&a)
takesAMutableVoidPointer(&b)
所以这是将对象的地址传递给函数,并且是原生的 Swift。
所以我正在研究 Ales Tsurko,[并且需要] Swift Chris Adamson 的 CoreAudio 示例的转换。但是,我遇到了一些我似乎无法找到直接答案的问题。
在示例中有这样的内容:
var theErr = noErr
var dictionarySize: UInt32 = 0
var isWritable: UInt32 = 0
theErr = AudioFileGetPropertyInfo(
audiofile,
kAudioFilePropertyInfoDictionary,
&dictionarySize,
&isWritable
)
我很好奇的是“&”(与号)运算符的使用。
现在,在普通的 C 系列语言中,this 指的是变量的内存地址,这里似乎就是这样做的。
令我困惑的是我在第四行写的是 Swift 还是 C 代码?
我知道您混合了 Obj-C 和 Swift,但我在 Swift 文档中找不到任何关于将 & 作为内存运算符使用的文档。那么这种使用是否没有记录,或者如果我暂时离开 Swift 进入 C/Obj-C 与那条线?
谢谢
来自the Apple documentation on Swift:
When a function is declared as taking an UnsafeMutablePointer argument, it can accept the same operands as UnsafeMutablePointer for any type Type.
If you have declared a function like this one:
func takesAMutableVoidPointer(x: UnsafeMutablePointer<Void>) { // ... }
You can call it in any of the following ways:
var x: Float = 0.0, y: Int = 0 var p: UnsafeMutablePointer<Float> = nil, q: UnsafeMutablePointer<Int> = nil var a: [Float] = [1.0, 2.0, 3.0], b: [Int] = [1, 2, 3] takesAMutableVoidPointer(nil) takesAMutableVoidPointer(p) takesAMutableVoidPointer(q) takesAMutableVoidPointer(&x) takesAMutableVoidPointer(&y) takesAMutableVoidPointer(&a) takesAMutableVoidPointer(&b)
所以这是将对象的地址传递给函数,并且是原生的 Swift。