Swift。向多个实例添加属性

Swift. Add attributes to multiple instances

我有 arrays 包含要应用特定属性的文本术语字符串。这是一个代码片段:

static var bold = [String]()
static let boldAttribs = [NSFontAttributeName: UIFont(name: "WorkSans-Medium", size: 19)!]
for term in bold {
    atStr.addAttributes(boldAttribs, range: string.rangeOfString(term))
}

这非常适合单个术语或短语使用。但它仅适用于特定术语的首次使用。有没有办法在不求助于数值范围的情况下将属性应用于同一术语的所有实例?例如,将同一字符串中的每个 "animation button" 都设为粗体。

编辑:有效。

// `butt2` is [String]() of substrings to attribute
// `term` is String element in array, target of attributes
// `string` is complete NAString from data
// `atStr` is final
for term in butt2 {
    var pos = NSRange(location: 0, length: string.length)
    while true {
        let next = string.rangeOfString(term, options: .LiteralSearch, range: pos)
        if next.location == NSNotFound {    break   }

        pos = NSRange(location: next.location+next.length, length: string.length-next.location-next.length)

        atStr.addAttributes(butt2Attribs, range: next)
    }
}

您不必求助于数值范围,但您确实需要求助于循环:

// atStr is mutable attributed string
// str is the input string
atStr.beginEditing()
var pos = NSRange(location: 0, length: atStr.length)
while true {
    let next = atStr.rangeOfString(target, options: .LiteralSearch, range: pos)
    if next.location == NSNotFound {
        break
    }
    atStr.addAttributes(boldAttribs, range: next)
    print(next)
    pos = NSRange(location: next.location+next.length, length: atStr.length-next.location-next.length)
}
atStr.endEditing()