Согласно Apple "Использование Swift с Cocoa и Objective-C", "В Swift вы можете использовать каждую пару необоснованных мостовых Foundation и Core Foundation типов взаимозаменяемо". Это делает работу с Core Foundation более простой, чем на самом деле...
Я пытаюсь работать с CFArray, который возвращается из CoreText. У меня есть этот код:
let lines: CFArrayRef = CTFrameGetLines(frame)
Я вижу два возможных способа доступа к элементам этого массива. Сейчас я не работаю для меня.
Путь # 1 - непосредственно используйте CFArray
let line: CTLineRef = CFArrayGetValueAtIndex(lines, 0)
Это приводит к ошибке "ConstUnsafePointer <() > 'в неконвертируемой форме в" CTLineRef "". Кастинг, похоже, не изменяет эту ошибку.
Точно так же я хотел бы использовать строки "взаимозаменяемо" как массив Swift, как будто он говорит, что я могу. Тем не менее,
let line: CTLineRef = lines[0]
дает ошибку "CFArrayRef" не имеет члена с именем "индекс"
Путь # 2 - Преобразование CFArray в массив Swift
var linesArray: Array = [CTLineRef]()
linesArray = bridgeFromObjectiveC(lines, linesArray.dynamicType)
Здесь я объявил массив Swift и установил его равным мостовому CFArray. Это компилируется без ошибок, но когда я запускаю его, я получаю крах EXC_BREAKPOINT во второй строке. Возможно, я не использую язык Swift правильно на этом...