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

时间:2019-06-06 07:29:13

标签: swift 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)
    }
}

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

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

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

  

静态成员'leading'不能用于'Horizo​​ntalAlignment'类型的实例

     

'(LocalizedStringKey)->文本'不能转换为'(LocalizedStringKey,String ?, Bundle ?, StaticString?)->文本'

     

“字体”不能转换为“字体?”

...等等。恢复到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")

问题

这仅仅是一个beta问题,还是我缺少什么?

3 个答案:

答案 0 :(得分:6)

您需要将string:添加到Title()初始化程序中:

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

当前,编译器错误具有误导性,并不位于实际问题所在的位置。

答案 1 :(得分:1)

您缺少初始化程序中的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)
    }
}

答案 2 :(得分:0)

今天(2019年10月1日),Swift提示我将from glob import glob for filename in glob(path+"/*.png"): im = image.imread(filename) ... 替换为。 string:

verbatim:今天开始工作 Text(verbatim: "Pressure")昨天工作,但今天没有。 hth