nsarray – 如何将CFArray转换为Swift Array?

nsarray – 如何将CFArray转换为Swift Array?,第1张

概述根据苹果公司的“使用Swift与Cocoa和Objective-C”,“在Swift中,您可以互换使用每对免费桥接基础和核心基础”.这使得Core Foundation的声音方式比实际上更简单 我正在尝试使用从CoreText返回的CFArray.我有这个代码: let lines: CFArrayRef = CTFrameGetLines(frame) 我看到访问这个数组成员的两种可能的方式. 根据苹果公司的“使用Swift与Cocoa和Objective-C”,“在Swift中,您可以互换使用每对免费桥接基础和核心基础”.这使得Core Foundation的声音方式比实际上更简单

我正在尝试使用从CoreText返回的CFArray.我有这个代码:

let lines: CFArrayRef  = CTFrameGetlines(frame)

我看到访问这个数组成员的两种可能的方式.现在也没有为我工作.

方式#1 – 直接使用CFArray

let line: CTlineRef = CFArrayGetValueAtIndex(lines,0)

这会产生错误“’ConstUnsafePointer<()&'不能转换为'CTlineRef''. Cast似乎没有改变这个错误. 同样,我也喜欢使用“可互换”行作为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语言在这一个…

基于Swift编译器和Swift文档的当前状态,这是如何做到的.希望这可以在以后的betas中被清理.

更新:自Beta 5以来,reinterpretCast已重命名为unsafeBitCast,并且必须将CTline对象作为输入发送给它.方式#2仍然不行.

方式#1 – 直接使用CFArray

let line: CTline = reinterpretCast(CFArrayGetValueAtIndex(lines,0))

关于Gary Makin的评论 – 参考文献可以从CTlineRef中删除,但这并不会改变ARC与非ARC.根据使用Swift与Cocoa和Objective-C第53-54页,ref和non-ref与编译器相同.尝试调用CFRelease会导致编译器错误.

方式#2 – 将CFArray转换为Swift数组 – 目前不工作

理想情况下,我们想将线转换为一个Swift数组的CTline对象,因为我们知道这是CTFrameGetlines返回的,给我们在转换后输入安全性.可能由于编译器错误,数组可以转换为[AnyObject]数组,但不能转换为[CTline].根据Apple’s documentation,这应该有效:

let linesNS: NSArray  = CTFrameGetlines(frame)let linesAO: [AnyObject] = linesNS as [AnyObject]let lines: [CTline] = linesAO as [CTline]

这将CFArray转换为NSArray,然后将NSArray转换为Swift Array [AnyObject],然后将该数组缩小到特定类型CTline.这是编译,但是当它运行时,最后一行有一个EXC_BREAKPOINT崩溃.

总结

以上是内存溢出为你收集整理的nsarray – 如何将CFArray转换为Swift Array?全部内容,希望文章能够帮你解决nsarray – 如何将CFArray转换为Swift Array?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1041316.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存