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

Posted

技术标签:

【中文标题】如何使用 SwiftUI 从文本中提取 Hashtags?【英文标题】:How to extract Hashtags from text using SwiftUI? 【发布时间】:2019-12-15 16:17:41 【问题描述】:

有什么方法可以使用 SwiftUI 从文本中找到 Hashtags? 这就是我的尝试的样子:

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

我的目标是这样的:

   extension String 
    func findMentionText() -> [String] 
        var arr_hasStrings:[String] = []
        let regex = try? NSRegularExpression(pattern: "(#[a-zA-Z0-9_\\pArabic\\pN]*)", 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】:

您需要使用String 初始化Text(),但您尝试使用ArrayString 初始化它。

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

msg.findMentionText().first.map  Text($0) 

或者您可以将元素数组加入单个String

 Text(msg.findMentionText().joined(separator: " "))

【讨论】:

谢谢,有没有什么办法可以改进功能以获得问题中的示例?通过我的尝试,我只得到主题标签作为输出 我需要这样:输入:你好#lulugaga你好吗,预期的输出如何是这样的你好#lulugaga你好吗 您想将主题标签变成与其余文本内联的按钮吗? 目前在SwiftUI 中是不可能的。要在UIKit 中实现这一点,您必须使用NSAttributedString 我更新了我的问题,你能看看我的这个函数调用不起作用吗? :Text(convert(msg.findMentionText().joined(separator: " "), string: msg)).padding(.top, 8)

以上是关于如何使用 SwiftUI 从文本中提取 Hashtags?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 SwiftUI 文本多行文本对齐从顶部和中心开始

如何从 webkit swiftUI 中的文本字段中搜索自定义文本

SwiftUI之深入解析如何使用组合矩形GeometryReader创建条形(柱状)图

SwiftUI之深入解析如何使用组合矩形GeometryReader创建条形(柱状)图

如何在 iOS 中使用 Swift/SwiftUI 将我从应用数据导出的文本文件移动到应用沙箱之外的位置?

如何从另一个视图swiftui中传递字段文本值