How can I concatenate NSAttributedStrings?

前端 未结 8 1360
野性不改
野性不改 2020-12-04 08:58

I need to search some strings and set some attributes prior to merging the strings, so having NSStrings -> Concatenate them -> Make NSAttributedString is not an option, is t

8条回答
  •  借酒劲吻你
    2020-12-04 09:29

    2020 | SWIFT 5.1:

    You're able to add 2 NSMutableAttributedString by the following way:

    let concatenated = NSAttrStr1.append(NSAttrStr2)
    

    Another way works with NSMutableAttributedString and NSAttributedString both:

    [NSAttrStr1, NSAttrStr2].joinWith(separator: "")
    

    Another way is....

    var full = NSAttrStr1 + NSAttrStr2 + NSAttrStr3
    

    and:

    var full = NSMutableAttributedString(string: "hello ")
    // NSAttrStr1 == 1
    
    
    full += NSAttrStr1 // full == "hello 1"       
    full += " world"   // full == "hello 1 world"
    

    You can do this with the following extension:

    // works with NSAttributedString and NSMutableAttributedString!
    public extension NSAttributedString {
        static func + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString {
            let leftCopy = NSMutableAttributedString(attributedString: left)
            leftCopy.append(right)
            return leftCopy
        }
    
        static func + (left: NSAttributedString, right: String) -> NSAttributedString {
            let leftCopy = NSMutableAttributedString(attributedString: left)
            let rightAttr = NSMutableAttributedString(string: right)
            leftCopy.append(rightAttr)
            return leftCopy
        }
    
        static func + (left: String, right: NSAttributedString) -> NSAttributedString {
            let leftAttr = NSMutableAttributedString(string: left)
            leftAttr.append(right)
            return leftAttr
        }
    }
    
    public extension NSMutableAttributedString {
        static func += (left: NSMutableAttributedString, right: String) -> NSMutableAttributedString {
            let rightAttr = NSMutableAttributedString(string: right)
            left.append(rightAttr)
            return left
        }
    
        static func += (left: NSMutableAttributedString, right: NSAttributedString) -> NSMutableAttributedString {
            left.append(right)
            return left
        }
    }
    

提交回复
热议问题