Swiftui 从视图修改器中修改视图

Swiftui 从视图修改器中修改视图,swiftui,Swiftui,我有一个HighlightedText视图,它由一个字符串、一个默认字体和一个高亮字体初始化。字符串可以有标记来指示需要突出显示的部分。一切正常。现在,我不想用默认字体和突出显示字体来初始化它,而是希望能够以更快捷的ui方式编写它,以实现更大的灵活性和更好的准备。因此,我希望能够做到以下几点: HighlightedText("My text <highlighted>") .defaultFont(.body) .highlightFont(.title) 然而,这是

我有一个HighlightedText视图,它由一个字符串、一个默认字体和一个高亮字体初始化。字符串可以有标记来指示需要突出显示的部分。一切正常。现在,我不想用默认字体和突出显示字体来初始化它,而是希望能够以更快捷的ui方式编写它,以实现更大的灵活性和更好的准备。因此,我希望能够做到以下几点:

HighlightedText("My text <highlighted>")
   .defaultFont(.body)
   .highlightFont(.title)

然而,这是行不通的。我传递的默认字体永远不会应用。

以下是可能的解决方案:

如果你有类似的声明

struct HighlightedText: View {
    var defaultFount = Font.body
    var highlightedFont = Font.headline

    // ... other code
然后您的自定义修改器可以是

extension HighlightedText {
    func defaultFont(_ font: Font) -> Self {
        var view = self
        view.defaultFount = font
        return view
    }

    func highlightedFont(_ font: Font) -> Self {
        var view = self
        view.highlightedFont = font
        return view
    }
}

谢谢在进行更改之前,我没有将视图声明为变量。另一件事是,无论如何,我可以这样做,但取而代之的是一个ViewModifier?因为我正在处理高亮显示的文本类型,所以我只能在创建此组件之后,在调用任何其他修饰符之前调用这些函数,否则我会松开该类型,然后无法调用这些方法。
extension HighlightedText {
    func defaultFont(_ font: Font) -> Self {
        var view = self
        view.defaultFount = font
        return view
    }

    func highlightedFont(_ font: Font) -> Self {
        var view = self
        view.highlightedFont = font
        return view
    }
}