这里是(只是您发布的指南的一个普通翻译):
func countLines(textView: UITextView) -> Int {
let layoutManager = textView.layoutManager
var numberOfLines = 0
var index = 0
var lineRange = NSRange()
var numberOfGlyphs = layoutManager.numberOfGlyphs
for(numberOfLines, index; index < numberOfGlyphs; numberOfLines++){
layoutManager.lineFragmentRectForGlyphAtIndex(index, effectiveRange: &lineRange)
index = NSMaxRange(lineRange);
}
return numberOfLines
}
,或者如果你需要一个特定的范围在textcode(像我一样):
func countLinesInRange(textView: UITextView, range: NSRange) -> Int{
let layoutManager = textView.layoutManager
var numberOfLines = 0
var index = range.location
var lineRange = range
var numberOfGlyphs = layoutManager.numberOfGlyphs
for(numberOfLines, index; index < range.location+range.length; numberOfLines++){
layoutManager.lineFragmentRectForGlyphAtIndex(index, effectiveRange: &lineRange)
index = NSMaxRange(lineRange);
}
return numberOfLines
}
为什么你没有展示你到目前为止所尝试的内容,以便它看起来不像是“为我翻译这个代码”的问题? – 2014-11-24 22:08:21
我写了很少的Swift代码,所以我可能错误地认为操作String.Index范围的挑战是复杂的,但我想从这个问题的最佳方法中学习,而不是我可能很差的方法的变体。 – jspinks 2014-11-24 22:30:43
最坏的情况下,“Swift等效”可以将它放入一个函数中,将其导入桥接听到的文件,并从Swift中调用ObjC C样式函数。 – nhgrif 2014-11-24 23:17:00