获取属性字符串中具有url属性的字符串数

时间:2018-03-28 18:11:20

标签: ios cocoa-touch nsattributedstring

我试图找到属性字符串中具有url属性的字符串数。例如,我有这样的事情:@"你好,我的名称是Michael"。

名称是一个包含url属性的字符串,如{URL:" www.google.com"}。

我想在我的属性字符串中找到包含网址的字符串数量。 我试图在我的字符串上使用enumerateAttributes,但这只返回了适用于整个字符串的属性。当我打印出我的字符串时,我可以清楚地看到有这个属性的字符串。我怎样才能访问它们?

1 个答案:

答案 0 :(得分: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
}