Swift 如何仅为最后两个字符更改字符串中的字体

Swift 如何仅为最后两个字符更改字符串中的字体,swift,range,nsattributedstring,nsrange,nsmutableattributedstring,Swift,Range,Nsattributedstring,Nsrange,Nsmutableattributedstring,我有字符串0.1234 要查找最后两个字符,我使用string.suffix(2) 如果我使用NSRange在attributedString中查找此范围,它将正常工作,直到字符串的值不等于。如果字符串类似于1.1212,则nsrange将应用于第一个找到的值(在本例中,string.suffix(2)=12) 因此,格式将是错误的 如何仅更改最后两个字符的字体 您可以使用String.Index方法 func index(_ i: String.Index, offsetBy n: Strin

我有字符串0.1234 要查找最后两个字符,我使用string.suffix(2) 如果我使用NSRange在attributedString中查找此范围,它将正常工作,直到字符串的值不等于。如果字符串类似于1.1212,则nsrange将应用于第一个找到的值(在本例中,string.suffix(2)=12) 因此,格式将是错误的

如何仅更改最后两个字符的字体


您可以使用
String.Index
方法

func index(_ i: String.Index, offsetBy n: String.IndexDistance, limitedBy limit: String.Index) -> String.Index?
字符串.endIndex
上,负偏移量为2,并受
字符串.startIndex
的限制:


let string=“1.1212”
如果let start=string.index(string.endIndex,offsetBy:-2,limitedBy:string.startIndex){

打印(字符串[start..您可以使用此扩展名

extension String {
    func attributedStringWithColorSize( color: UIColor, size:CGFloat = 12) -> NSAttributedString {
        let attributedString = NSMutableAttributedString(string: self)


        if self.count < 3 {
            return attributedString
        }
            let range = NSRange(location: self.count-2, length: 2)
            attributedString.addAttribute(NSAttributedString.Key.font,value: UIFont.systemFont(ofSize: size) , range: range)
            attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range)

        return attributedString
    }
}


确保您的字符串至少有2个字符,并且字符串endIndex的偏移量为-2As@leo说,长度2的后缀具有索引end-2。您还可以使用长度、前缀和后缀来获得这两个部分……这个问题实际上与
NSAttributedString
无关,所有内容都与简单的子字符串计算有关on.@N关于如何更改字符串中最后两个字符的字体而不使其属性化?以及在本例中如何更改最后两个字符的字体?我只看到一种解决方案,即使用不同字体创建两个UILabel
let string = "1.1212"
let label = UILabel(frame: .zero)
label.attributedText = NSAttributedString(string: string)

if let start = string.index(string.endIndex, offsetBy: -2, limitedBy: string.startIndex), let attrStr = label.attributedText {
    let mutableAttributedString = NSMutableAttributedString(attributedString: attrStr)
    mutableAttributedString.addAttributes([NSAttributedString.Key.foregroundColor: UIColor.red, NSAttributedString.Key.font: label.font.withSize(label.font.pointSize * 0.6)], range: .init(start..<string.endIndex, in: string))
    label.attributedText = mutableAttributedString
    label.sizeToFit()
}
extension String {
    func attributedStringWithColorSize( color: UIColor, size:CGFloat = 12) -> NSAttributedString {
        let attributedString = NSMutableAttributedString(string: self)


        if self.count < 3 {
            return attributedString
        }
            let range = NSRange(location: self.count-2, length: 2)
            attributedString.addAttribute(NSAttributedString.Key.font,value: UIFont.systemFont(ofSize: size) , range: range)
            attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range)

        return attributedString
    }
}
@IBOutlet weak var lab: UILabel!
    override func viewDidLoad() {

        lab.attributedText = "1.1470".attributedStringWithColorSize(color: UIColor.red , size: 15)
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }