這裏是(只是您發佈的指南的一個普通翻譯):
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