2016-03-14 2 views
0

Итак, я работаю через Алеся Цурко [и нужно] Быстрое преобразование примера CoreAudio Криса Адамсона. Однако я столкнулся с чем-то, на что я не могу найти прямой ответ.Является ли & (адрес в памяти) оператором в Swift или я использую C?

В примерах есть что-то вроде этого:

var theErr = noErr 
    var dictionarySize: UInt32 = 0 
    var isWritable: UInt32 = 0 
    theErr = AudioFileGetPropertyInfo(
      audiofile, 
      kAudioFilePropertyInfoDictionary, 
      &dictionarySize, 
      &isWritable 
    ) 

Что мне любопытно, является использование «&» (амперсанд) оператора.

В настоящее время в нормальном C-семействе языков это относится к адресу памяти переменной и, похоже, делает это здесь.

Что, и я смущен, я пишу код Swift или C в четвертой строке?

Я знаю, что вы смешиваете Obj-C и Swift, но я не могу найти что-либо в Swift Documentation об использовании & в качестве оператора памяти. Таким образом, это использование недокументировано, или если я временно вышел из Swift в C/Obj-C с этой линией?

Благодаря

+0

Это не о C. – Olaf

+1

Поиск «inout parameters» или поиск «амперсанд» в книгах Swift, это * * документально. –

ответ

1

От the Apple documentation on Swift:

Если функция объявлена ​​как принимает UnsafeMutablePointer аргумент, он может принимать те же операнды, как UnsafeMutablePointer для любого типа типа.

Если вы объявили функцию, как этот:

func takesAMutableVoidPointer(x: UnsafeMutablePointer<Void>) { 
    // ... 
} 

Вы можете вызвать его в любой из следующих способов:

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) 

Так вот передавая адрес объекта, который функция, и является родной Свифт.

+0

Хорошо, я понял. Это имеет смысл, по какой-то причине я не получил связь. Благодаря! – FTNomad