2017-08-28 3 views
0

Je veux sortie commeRemplacer la chaîne attribuée en NSMutableAttributedString Dans Swift 3

Mon nom est Pramod Tapaniya

en bas JSON. J'ai essayé le code ci-dessous, mais obtenant l'erreur de temps de compilation parce que je remplace la chaîne avec la chaîne attribuée. J'ai utilisé SwiftyJson pour gérer json.

let boldAttributes = [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 13)] 
let simpleAttributes = [NSForegroundColorAttributeName: UIColor.lightGray, NSFontAttributeName: UIFont.systemFont(ofSize: 13)] 

let strComm = NSMutableAttributedString(string: dict["text"].stringValue, attributes: simpleAttributes) 
let attributedStr = NSMutableAttributedString() 

attributedStr.append(strComm) 

let arrFormatId = dict["formats"]["formatId"] 
let arrFormatValue = dict["formats"]["formatValue"] 

for var i in 0..<arrFormatId.count{ 
    let strBold = NSMutableAttributedString(string: arrFormatValue[i].stringValue, attributes: boldAttributes) 
    attributedStr.mutableString.replaceOccurrences(of: arrFormatId[i].stringValue, with: strBold, options: .caseInsensitive, range: NSRange(location: 0, length: attributedStr.length)) //Cannot convert value of type 'NSMutableAttributedString' to expected argument type 'String' 
} 
return attributedStr 

Répondre

0

avec ce code remplace

let boldAttributes = [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 13)] 
let simpleAttributes = [NSForegroundColorAttributeName: UIColor.lightGray, NSFontAttributeName: UIFont.systemFont(ofSize: 13)] 

let strComm = NSMutableAttributedString(string: dict["text"].stringValue, attributes: simpleAttributes) 
let attributedStr = NSMutableAttributedString() 

attributedStr.append(strComm) 

let arrFormatId = dict["formats"]["formatId"] 
let arrFormatValue = dict["formats"]["formatValue"] 

for var i in 0..<arrFormatId.count{ 
    let strBold = NSMutableAttributedString(string: arrFormatValue[i].stringValue, attributes: boldAttributes) 
    while attributedStr.mutableString.contains(arrFormatId[i].stringValue) { 
     let range = attributedStr.mutableString.range(of: arrFormatId[i].stringValue) 
     attributedStr.replaceCharacters(in: range, with: strBold) 
    } 
} 
return attributedStr 
0

solution simple serait

var text = "My name is B0$ Tapaniya" 
var arrayID = ["B0$"] 

var arrayValue = ["Pramod"] 

if arrayID.count == arrayValue.count { 
    for key in arrayID { 
     text = text.replacingOccurrences(of: key, with:arrayValue[arrayID.index(of: key)!]) 
    } 

// Now use below methods 

    let formattedString = NSMutableAttributedString() 
    formattedString 
    .normal(text) 
    .bold(arrayValue.joined(separator: ",")) 

} 

De https://stackoverflow.com/a/37992022/4601900

extension NSMutableAttributedString { 
    @discardableResult func bold(_ text:String) -> NSMutableAttributedString { 
     let attrs = [NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.boldSystemFont(ofSize: 13)] 

     let boldString = NSMutableAttributedString(string:"\(text)", attributes:attrs) 
     self.append(boldString) 
     return self 
    } 

    @discardableResult func normal(_ text:String)->NSMutableAttributedString { 
     let normal = NSAttributedString(string: text) 
     self.append(normal) 
     return self 
    } 
} 
0

S'il vous plaît, essayez ceci:

var testDict = ["text": "My name is B0$ Tapaniya.","formats": ["formatId": ["B0$"],"formatValue": ["Pramod"]]] as [String : AnyObject] 
let attrString = NSMutableAttributedString(string: testDict["text"] as! String) 
var formatIDS = testDict["formats"]?.value(forKey: "formatId") as! [String] 
var formatValues = testDict["formats"]?.value(forKey: "formatValue") as! [String] 

for i in 0..<formatIDS.count { 
    attrString.mutableString.replaceOccurrences(of: formatIDS[i], with: formatValues[i], options: NSString.CompareOptions.caseInsensitive, range: NSRange(location: 0, length: attrString.length)) 
    attrString.addAttributes([NSFontAttributeName: UIFont.boldSystemFont(ofSize: 12.0)], range: attrString.mutableString.range(of: formatValues[i] as String)) 
} 
print(attrString) 
+0

"Pramod" en gras. Vous venez de remplacer la chaîne. –

+0

Mise à jour de la réponse. –