string - 在 Swift 中,NSAttributedString 的字符数比 String 多吗?

标签 string swift nsattributedstring

我正在尝试将属性添加到 Swift String 中的某些范围。 我在子字符串中找到了第一个和最后一个符号的范围,并将它们之间的文本(包括)着色为红色。

let mutableString = NSMutableAttributedString(string: text)
let str = mutableString.string
//Red symbols
var t = 0
let symbols = mutableString.string.characters.count
while t < symbols {
    if str[t] == "[" {
    let startIndex = t
    while str[t] != "]" {
        t += 1
    }
    t += 1
    let endIndex = t

    mutableString.addAttribute(
        NSForegroundColorAttributeName,                    
        value: UIColor.redColor(),   
        range: NSMakeRange(startIndex, endIndex - startIndex))
    }
    t += 1
}

但我发现 String 和 NSMutableAttributedString 中的范围不相等。 String 中的范围较短(此文本不是 Unicode 编码)。 有没有某种方法可以找到不在底层字符串中但在 NSAttributedString 中的范围以正确找到它?

例子:

print(mutableString.length) //550
print(mutableString.string.characters.count) //548

为什么会有这种差异?

最佳答案

是的,可以在 NSMutableAttributedString 中找到范围。

示例:

let text = "[I love Ukraine!]"

var start = text.rangeOfString("[")
var finish = text.rangeOfString("]")

let mutableString = NSMutableAttributedString(string: text)

let startIndex = mutableString.string.rangeOfString("[")
let finishIndex = mutableString.string.rangeOfString("]")

Playground 的示例输出:enter image description here

关于string - 在 Swift 中,NSAttributedString 的字符数比 String 多吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36257068/

相关文章:

java - 最后一次出现数字后的子字符串? (JAVA)

ios - UILabel 上的 SizeToFit 和自动布局

ios - 如何使用 Swift 在 UIWebView 上远程显示 PDF 文件?

iOS Swift Firebase - 如何使当前用户数据在整个应用程序中可用?

c++ - 在 C++ 中检查 stoi() 函数中的 int 限制

c++ - 两次相同的for循环 : one compiles, 另一个没有

c# - 如何仅对字符串的一部分进行字符串替换?

cocoa - 如何将 NSAttributedString 中的字符大小写更改为大写

ios - 有没有一种简单的方法可以在 iOS 上使用标记创建 NSAttributedString?

使用 Swift 4 从 HTML 数据到 JSON 到字符串