2017-08-30 68 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

這與我的第二種方法相同,我知道它的作用。 –