试图找出为什么现在需要一个参数,当我只是试图传递一个变量。使用通用文本作为"user.username"的占位符和";user.fullname"和when "let user: user "已删除,它将按预期运行。但是,在预览中添加RowView时,需要使用"user:"参数。
import SwiftUI
struct RowView: View {
let user: User
var body: some View {
HStack(spacing: 12) {
Circle()
.frame(width: 48, height: 48)
VStack(alignment: .leading, spacing: 4) {
Text(user.username)
.font(.subheadline).bold()
.foregroundColor(.black)
Text(user.fullname)
.font(.subheadline)
.foregroundColor(.gray)
}
Spacer()
}
.padding(.horizontal)
.padding(.vertical)
}
}
struct RowView_Previews: PreviewProvider{
static var previews: some View {
RowView()
}
}
声明user
而不带起始值表示user
是初始化视图所必需的参数。在RowView_Previews
中,这是画布中视图的预览,RowView
在没有user
值的情况下被初始化。所以你基本上有三个选项来解决这个问题:
1。为预览传递一个user
对象
这可能是最好的解决方案。您可以为预览内容传入一个新的用户对象:
static var previews: some View {
RowView(user: User())
}
2。给user
一个默认值
您可以给user
一个默认值,这意味着不再需要传入user
对象来初始化RowView
:
let user: User = User()
3。完全删除预览提供程序
如果你不使用预览(我强烈建议你应该这样做),那么你可以完全删除这部分,因为它不是应用程序编译的必要条件:
struct RowView_Previews: PreviewProvider{
static var previews: some View {
RowView()
}
}
您有一个变量let user: User
,所以您需要从您想要调用这个类的任何地方提供值。看到你的预览显示一个错误。单击错误并单击修复。然后提供User()。或者添加以下代码:
struct RowView_Previews: PreviewProvider{
static var previews: some View {
RowView(user: User())
}
}
或者在声明变量时给出默认值。那么就不需要提供预览了。像这样的代码:
import SwiftUI
struct RowView: View {
let user: User = User()
var body: some View {
}
}
为预览提供默认数据的通常方法是向User
结构体添加静态属性,例如
struct User {
let username, fullname: String
static let example = User(username: "John", fullname: "John Doe")
}
并使用
struct RowView_Previews: PreviewProvider{
static var previews: some View {
RowView(user: User.example)
}
}
顺便说一下
.padding(.horizontal)
.padding(.vertical)
的作用与
相同.padding()
强烈建议将颜色.black
替换为.primary
(这是默认的),.gray
替换为.secondary
,以便在黑暗模式下具有适应的外观。