如何使用SwiftUI从文本中提取标签?

时间:2019-12-15 16:17:41

标签: swift swiftui

是否可以通过SwiftUI从文本中找到 标签 ? 这就是我的尝试:

这样调用函数:Text(convert(msg.findMentionText().joined(separator: " "), string: msg)).padding(.top, 8) 。 但这根本不起作用。

我的目标是这样的: enter image description here

   extension String {
    func findMentionText() -> [String] {
        var arr_hasStrings:[String] = []
        let regex = try? NSRegularExpression(pattern: "(#[a-zA-Z0-9_\\p{Arabic}\\p{N}]*)", options: [])
        if let matches = regex?.matches(in: self, options:[], range:NSMakeRange(0, self.count)) {
            for match in matches {
                arr_hasStrings.append(NSString(string: self).substring(with: NSRange(location:match.range.location, length: match.range.length )))
            }
        }
        return arr_hasStrings
    }
}
func convert(_ hashElements:[String], string: String) -> NSAttributedString {

    let hasAttribute = [NSAttributedString.Key.foregroundColor: UIColor.orange]

    let normalAttribute = [NSAttributedString.Key.foregroundColor: UIColor.black]

    let mainAttributedString = NSMutableAttributedString(string: string, attributes: normalAttribute)

    let txtViewReviewText = string as NSString

    hashElements.forEach { if string.contains($0) {
        mainAttributedString.addAttributes(hasAttribute, range: txtViewReviewText.range(of: $0))
        }
    }
    return mainAttributedString
}

1 个答案:

答案 0 :(得分:2)

您需要将Text()String一起使用,但您尝试使用Array的{​​{1}}对其进行初始化。

如果数组不为空,则可以只显示第一个:

String

或者您可以将elements数组合并为一个msg.findMentionText().first.map { Text($0) }

String