我正在尝试使用从CoreText返回的CFArray。 我有这段代码:
let lines: CFArrayRef = CTFrameGetLines(frame)
我看到有两种访问这个数组成员的方法。但目前都不能正常工作。
方法一 - 直接使用CFArray
let line: CTLineRef = CFArrayGetValueAtIndex(lines, 0)
这导致出现错误:"'ConstUnsafePointer<()>'在转换为'CTLineRef'时不可转换"。强制转换似乎不能解决此问题。
同样地,我希望像使用Swift数组一样“可互换”地使用行。但是,
let line: CTLineRef = lines[0]
产生错误:“'CFArrayRef'没有名为'subscript'的成员”
方法 #2 - 将CFArray转换为Swift数组
var linesArray: Array = [CTLineRef]()
linesArray = bridgeFromObjectiveC(lines, linesArray.dynamicType)
我在这里声明了一个Swift数组,并将其设置为桥接的CFArray。这段代码可以编译通过,但是当我运行它时,在第二行会导致EXC_BREAKPOINT崩溃。也许我在这个问题上没有正确地使用Swift语言...
NSArray
双重转换来将CFArray
转换为 Swift 中的Array
。(例如:let nsArray = CTFrameGetLines(frame) as NSArray; let array = nsArray as [CTLine]
)但我还没有尝试过这些 API。 - rickster