尝试传入时缺少必需参数"user"

  • 本文关键字:参数 user swiftui
  • 更新时间 :
  • 英文 :


试图找出为什么现在需要一个参数,当我只是试图传递一个变量。使用通用文本作为"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,以便在黑暗模式下具有适应的外观。

最新更新