【问题标题】:Get the number of strings that have a url attribute in an attributed string获取属性字符串中具有 url 属性的字符串数
【发布时间】:2018-03-28 18:11:19
【问题描述】:
我正在尝试在属性字符串中查找具有 url 属性的字符串的数量。例如,我会有这样的内容:@“你好,我的 name 是 Michael”。
name 是一个带有类似 {URL: "www.google.com"} 的 url 属性的字符串。
我想在我的属性字符串中找到带有 url 的字符串的数量。
我尝试在我的字符串上使用 enumerateAttributes ,但这仅返回适用于整个字符串的属性。当我打印出我的字符串时,我可以清楚地看到有这个属性的字符串。我怎样才能访问它们?
【问题讨论】:
标签:
ios
cocoa-touch
nsattributedstring
【解决方案1】:
你很接近。为此,您可以使用enumerateAttribute(_:in:options:using:) 方法。您传入您感兴趣的属性(在您的情况下为.link),它使用字符串的每个子范围以及属性的范围和值调用闭包。这包括没有该属性的子范围。在这种情况下,nil 被传递为值。因此,要计算字符串中的链接,您需要计算非零属性:
func linksIn(_ attributedString: NSAttributedString) -> Int {
var count = 0
attributedString.enumerateAttribute(.link, in: NSRange(location: 0, length: attributedString.length), options: []) { attribute, _, _ in
if attribute != nil {
count += 1
}
}
return count
}