我正在尝试将HTML格式化文本转换为属性字符串,并将其插入到SwiftUI视图中。
首先,我有一个String将HTML字符串转换为NSAttributedString:
extension String {
func convertHtml() -> NSAttributedString {
guard let data = data(using: .utf8) else { return NSAttributedString() }
if let attributedString = try? NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) {
return attributedString
} else {
return NSAttributedString()
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个HTMLLabel视图:
struct HTMLLabel: UIViewRepresentable {
let html: String
func makeUIView(context: UIViewRepresentableContext<Self>) -> UILabel {
let label = UILabel()
label.attributedText = html.convertHtml()
return label
} …Run Code Online (Sandbox Code Playgroud) 我的应用程序处理了很多第三方集成.我有一个用于第三方集成的抽象基类,它指定了一组集成类应该处理的方法 - 然后可以使用所有集成中不可用的其他功能扩展某些集成.
基本上它看起来像这样:
abstract class Integration { ... }
trait SingleSignOn { ... }
class NormalIntegration extends Integration {}
class SingleSignOnIntegration extends Integration with SingleSignOn {}
Run Code Online (Sandbox Code Playgroud)
我希望能够整理出具有特定特征的所有集成,这就是我认为的基本解决方案:
val allIntegrations: Seq[Integration] = ...
def integrationsWithTrait[T]: Seq[Integration] = {
allIntegrations.filter(_.isInstanceOf[T])
}
Run Code Online (Sandbox Code Playgroud)
用法是:
val singleSignOnIntegrations = integrationsWithTrait[SingleSignOn]
Run Code Online (Sandbox Code Playgroud)
问题是isInstanceOf[T]始终返回true(意味着我最终得到singleSignOnIntegrations == allIntegrations),而硬编码isInstanceOf[SingleSignOn]按预期工作.
我如何integrationsWithTrait按照我的意愿修复工作?