无法在 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
对于我的 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