如何使用 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()
,但您尝试使用Array
或String
初始化它。
如果数组不为空,您可以只显示第一个:
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?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 webkit swiftUI 中的文本字段中搜索自定义文本
SwiftUI之深入解析如何使用组合矩形GeometryReader创建条形(柱状)图
SwiftUI之深入解析如何使用组合矩形GeometryReader创建条形(柱状)图