Сначала получите строки внутри разделителя.
let query = "This is not bold, -bold- this is bold, -/bold- and this is another not bold, -bold- this is another bold -/bold-"
let regex = try! NSRegularExpression(pattern: "-bold- (.*?) -/bold-", options: [])
var results = [String]()
regex.enumerateMatches(in: query, options: [], range: NSMakeRange(0, query.utf16.count)) { result, flags, stop in
if let r = result?.range(at: 1),
let range = Range(r, in: query) {
results.append(String(query[range]))
}
}
print(results)
Затем создайте метод расширения строки, как показано ниже.
extension String {
func attributedString(with style: [NSAttributedString.Key: Any]? = nil,
and highlightedTextArray: [String],
with highlightedTextStyleArray: [[NSAttributedString.Key: Any]?]) -> NSAttributedString {
let formattedString = NSMutableAttributedString(string: self, attributes: style)
if highlightedTextArray.count != highlightedTextStyleArray.count {
return formattedString
}
for (highlightedText, highlightedTextStyle) in zip(highlightedTextArray, highlightedTextStyleArray) {
let highlightedTextRange: NSRange = (self as NSString).range(of: highlightedText as String)
formattedString.setAttributes(highlightedTextStyle, range: highlightedTextRange)
}
return formattedString
}
}
Сведения о методе:
- первый аргумент: стиль шрифта и другие атрибуты, которые должны применяться для полной строки.
- второй аргумент: массив строк, для которых будет применяться новый стиль.
- третий аргумент: новый стиль (в данном случае, полужирный), который будет применен.
- возвращает результат приписанная строка.
Наконец, вызовите метод, как показано ниже.
let attributedText = query.attributedString(with: [.font: UIFont.systemFont(ofSize: 12.0, weight: .regular)],
and: results,
with: [[.font: UIFont.systemFont(ofSize: 12.0, weight: .bold)]])
Надеюсь, это поможет.