2017-08-30 64 views
0

替换字符的任何想法,为什么这种崩溃:崩溃的NSAttributedString

extension NSAttributedString { 

    func replaceCharacters(inRange: NSRange, withString: String) -> NSAttributedString { 
     let mutableString = mutableCopy() as! NSMutableAttributedString 
     mutableString.replaceCharacters(in: inRange, with: withString) 
     return mutableString 
    } 

} 

let label = UILabel() 
label.attributedText = NSAttributedString(string: "abcdef") 
let string = label.attributedText?.replaceCharacters(inRange: NSRange(location: 1, length: 1), withString: "-") 

但是,这不?

let label = UILabel() 
label.attributedText = NSAttributedString(string: "abcdef") 

let mutableString = label.attributedText?.mutableCopy() as! NSMutableAttributedString 
mutableString.replaceCharacters(in: NSRange(location: 1, length: 1), with: "-") 
let string: NSAttributedString = mutableString 

PS:首先,我对第二要点做的是代码从replaceCharacters(inRange:withString:)内从第一要点复制。

+3

你什么信息应用程序崩溃时得到了吗? – luckyShubhra

+0

糟糕的内存访问 –

回答

0

试试这个:

extension String { 
    func replaceCharacters(withString: String) -> NSAttributedString { 

     var range = (self as NSString).range(of: withString) 
     let attributedString = NSMutableAttributedString(string:self) 
     attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.black, range: range) 
     if let font = UIFont(name: "Helvetica Bold", size: 14) { 
      attributedString.addAttribute(NSFontAttributeName, value: font, range: range) 
     } 
     return attributedString 
    } 
} 

let label = UILabel() 
label.attributedText = "pqr abcdefg xyz".replaceCharacters("abc") 

注:请字符串的addAttribute按您的要求

+0

但我需要更改'NSAttributedString'中的字符串,而不是将新属性添加到'String'。 –

+0

你试过了吗? – Yuyutsu

+0

试过了么?即使你的方法有效,这也不是我所需要的。 –

0

试试这个,这将帮助你

斯威夫特3:

let label = UILabel() 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     let attrString = NSMutableAttributedString(string: "abcdef") 
     attrString.mutableString.replaceCharacters(in: NSRange(location: 1, length: 1), with: "-") 

     label.attributedText = NSAttributedString(string: attrString.string) 
     print(label.attributedText!) 

    } 
+0

这与我的第二种方法相同,我知道它的作用。 –