无法在 SwiftUI 中使用自定义视图

Cannot use custom view in SwiftUI

对于我的 SwiftUI 应用程序,我创建了一个简单的 Title 视图,它具有设置的字体大小和文本颜色。 Title声明如下:

struct Title: View {
    var string: String
    
    var body: some View {
        Text(string)
            .font(.system(size: 32))
            .color(Color.black)
    }
}

现在我的内容视图正文中有以下文本对象:

var body: some View {
    VStack(alignment: .leading) {
        Text("Welcome")
            .font(.largeTitle)
            .color(Color.black)
        Text("to SwiftUI")
            .font(.largeTitle)
            .color(Color.secondary)
    }
}

所以现在,我想用我的 Title 替换这两个 Text

var body: some View {
    VStack(alignment: .leading) {
        Title("Welcome")
        Title("to SwiftUI")
    }
}

替换视图后,我从 Xcode 收到一些看似无关的错误消息,这些消息使应用程序停止编译:

Static member 'leading' cannot be used on instance of type 'HorizontalAlignment'

'(LocalizedStringKey) -> Text' is not convertible to '(LocalizedStringKey, String?, Bundle?, StaticString?) -> Text'

'Font' is not convertible to 'Font?'

...等等。恢复为 Text 而不是 Title “修复”了问题。

有趣的是,我还有一个自定义 PrimaryButton 视图,我可以毫无问题地添加它:

struct PrimaryButton: View {
    var title: String
    
    var body: some View {
        Button(action: { print("tapped") }) {
            Text(title)
                .font(Font.primaryButton)
                .offset(y: 1)
                .padding(.horizontal, 20)
                .padding(.vertical, 14)
        }
    }
}

...然后使用它:

PrimaryButton(title: "Let's go")

问题

这只是一个测试版问题,还是我遗漏了什么?

您需要将 string: 添加到您的 Title() 初始值设定项中:

var body: some View {
    VStack(alignment: .leading) {
        Title(string: "Welcome")
        Title(string: "to SwiftUI")
    }
}

编译器错误目前具有误导性,并且不在真正问题所在附近。

您在初始化程序中缺少 string: 参数。 请在下面找到更新的代码:

var body: some View {
    VStack(alignment: .leading) {
        Title(string: "Welcome")
        Title(string: "to SwiftUI")
    }
}

仅供参考:
我已经创建了一个示例应用程序

// MARK - CustomView

struct ContentView : View {
    var body: some View {
        VStack{
            CustomView(aString: "First String")
            CustomView(aString: "Second String")
        }
    }
}

// MARK - CustomView

struct CustomView : View {
    var aString: String
    var body: some View {
        Text(aString)
    }
}

今天,2019 年 10 月 1 日,Swift 提示我将 string: 替换为。 verbatim: .

Text(verbatim: "Pressure") 今天上班 Text(string: "Pressure") 昨天工作,但今天不工作。 hth