我可以将包含降价的字符串传递给自定义视图吗?

Can I pass a string containing markdown to custom view?

我想将包含 markdown 的字符串传递给自定义视图并在该视图中完成格式化。

示例:

struct MyTest: View {
    let text: String // Some other type needed here
    
    init(_ text: String) { self.text = text }
    
    var body: some View {
        Text(text)
        Text("*Inline*")
    }
}

使用视图,例如:MyTest("*Test*")

这将产生输出:

*Test* Inline

目标是得到输出:

Test Inline

是否可以将格式传递到自定义视图中的 Text(text) 行?

格式化降价“魔法”来自 Textthis initialiser,它需要一个 LocalizedStringKey。由于 LocalizedStringKey 符合 ExpressibleByStringLiteralText("*Inline*") 将调用此初始化程序,但 Text(someStringVariable) 不会。

因此,要在 text 属性 中格式化降价,您只需调用该初始化程序。您可以使 text 成为 LocalizedStringKey 本身:

struct MyTest: View {
    let text: LocalizedStringKey
    
    init(_ text: LocalizedStringKey) { self.text = text }
    
    var body: some View {
        Text(text)
        Text("*Inline*")
    }
}

或者在创建Text时创建一个LocalizedStringKey:

Text(LocalizedStringKey(text))

通过使用 Text 的这个初始化程序,您可以获得本地化文本的额外好处! :D