Для вывода в программе базы данных у меня есть определенный текст, в который я вставил метки для выделения полужирным шрифтом или курсивом, а также текст, заменяемый изображениями. Например:Измените текст атрибутивной строки и сохраните атрибуты в Swift
«% Важно%^Все сотрудники к breakroom ^» должен иметь конечный результат, как:
ВажныеВсе сотрудники в breakroom
Я код написанный, чтобы найти текст с «%» знаки вокруг него и «^» знаки, но беда у меня сейчас есть текстовые выходы, такие как:
% Важно%^Все сотрудники к breakroom^
Я хотел бы удалить эти% и ^, сохраняя при этом форматирование строки.
Это код, я использую до тех пор, пока он ломает:
func processText(inString string: String) -> NSAttributedString {
let pattern = ["(?<=\\^).*?(?=\\^)","(?<=\\%).*?(?=\\%)","\\^", "\\%"]
let italicsRegex = NSRegularExpression(pattern: pattern[0], options: .allZeros, error: nil)
let range = NSMakeRange(0, count(string))
let italicsMatches = italicsRegex?.matchesInString(string, options: .allZeros, range: range) as? [NSTextCheckingResult]
var attributedText = NSMutableAttributedString(string: string)
for match in italicsMatches! {
attributedText.addAttribute(NSFontAttributeName, value: UIFont(name: "Helvetica-Oblique", size: 14.0)!, range: match.range)
}
let boldRegex = NSRegularExpression(pattern: pattern[1], options: .allZeros, error: nil)
let boldMatches = boldRegex?.matchesInString(string, options: .allZeros, range: range) as? [NSTextCheckingResult]
for match in boldMatches! {
attributedText.addAttribute(NSFontAttributeName, value: UIFont(name: "Helvetica-Bold", size: 14.0)!, range: match.range)
}
let removeItalicsMarksRegex = NSRegularExpression(pattern: pattern[2], options: .allZeros, error: nil)
let removeItalicsMarksMatches = removeItalicsMarksRegex?.matchesInString(string, options: .allZeros, range: range) as? [NSTextCheckingResult]
var numberOfLoops = 0
for match in removeItalicsMarksMatches! {
attributedText.replaceCharactersInRange(match.range, withString: "")
}
return attributedText.copy() as! NSAttributedString
}
Это работает для% матча (но только первый символ) и вызывает сбой на символ^сразу.
Любая помощь или консультация с решением этой проблемы будут оценены. Благодарю.
Благодарим за помощь. Я попробую это, как только смогу. Я видел некоторые версии obj-c этого, но я просто изучаю Swift, поэтому объективный перевод кода не является чем-то, что я могу сделать сам. –
Это очень странно, но в половине случаев этот код возвращает «Выполнение было прервано, причина: EXC_BAD_ACCESS (code = 1 ...)» и половина времени его работы. Любая причина, почему это может быть настолько неустойчивым? –
@DanM: Нет. У вас есть конкретный пример входной строки, где он сбой? –