Swift 3:
let layoutManager:NSLayoutManager = textView.layoutManager
let numberOfGlyphs = layoutManager.numberOfGlyphs
var numberOfLines = 0
var index = 0
var lineRange:NSRange = NSRange()
while (index < numberOfGlyphs) {
layoutManager.lineFragmentRect(forGlyphAt: index, effectiveRange: &lineRange)
index = NSMaxRange(lineRange);
numberOfLines = numberOfLines + 1
}
print(numberOfLines)
Нет. Дженерики предназначены только для компиляции. Вы просто теряете выгоду от этого чека. Во время выполнения вся общая информация стирается
Другими словами,
ArrayList<Type>
во время выполнения - это просто ArrayList. Преимущество этого перед списком состоит в том, что когда вы пишете свой код, компилятор проверяет, что вы не помещаете в свой список ничего неуместного.
Реальный тип действительно ArrayList
. Тип ArrayList<ClassName>
существует только для компилятора (это называется стиранием), и его целью является обеспечение безопасности типов на уровне компилятора. Но на уровне байт-кода вы не обладаете знаниями об общих типах.