Классы
NSRange
и NSRegularExpression
предшествуют Swift и основаны на концепции NSString
, согласно которой символ равен коду UTF-16.С другой стороны, класс Swift String
имеет концепцию, согласно которой символ представляет собой расширенный кластер графов Unicode, то есть наименьшую единицу, которую вы можете выбрать в текстовом редакторе.В результате, когда вы указываете позиции или длину, NSRange
/ NSString
и String
различаются.
Обычно сложно использовать экземпляр NSString
(вместо экземпляра String
)для обработки регулярных выражений:
let regex = try! NSRegularExpression(pattern: ".*[^A-Za-z].*", options: NSRegularExpression.Options())
let text = self.titleLabel.text! as NSString
let value = regex.matches(in: text, options: NSRegularExpression.MatchingOptions(), range:NSMakeRange(0, text.length))