将属性转换为 URL / NSURL

Convert attribute to URL / NSURL

我正在开发一个由 NSAttributedString 填充的 UITextView

我使用以下代码从属性字符串中提取 URL:

if let attribute = self.textStorage.attribute(NSAttributedString.Key.link, at: characterIndex, effectiveRange: nil){
    let url = URL(string: (attribute as AnyObject).debugDescription ?? "");
    print("URL: \(url.absoluteString)");
}

这似乎不是获取 URL 的有效方法,因为我正在将属性转换为其调试描述,然后使用它来初始化新的 URL

是否有更多 "official" 方法从属性中获取 URL

我在将 .link 值转换为 StringURL 时从未遇到过问题,如下所示:

if let urlString = (attribute as? String) ?? (attribute as? URL)?.absoluteString {
    print("URL: \(urlString)")

    // URL from string
    let url = URL(string: urlString)
}

我过去在将 .link 值单独转换为 String 时遇到了一些问题,这里在我的 post @RasheshBosamiya 评论中也遇到了这个问题,而且似乎值NSAttributedString.Key.link 可以是 URLString,具体取决于设置的 what/how。