You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI使用网页链接时出现'No arguments'参数错误求助

报错根因

你为ContactsDetailView实现了无入参的自定义init()方法,覆盖了Swift结构体默认自动生成的成员构造器。此时该View的构造器不接收任何参数,预览代码中调用ContactsDetailView(contact: contacts[0])传入参数时,就会触发Argument passed to call that takes no arguments报错。

当前的无参构造器还存在两个问题:

  • 没有初始化结构体的存储属性contact,Swift要求所有存储属性必须在构造阶段完成赋值
  • 单独定义websitetext属性存储contact.website属于冗余逻辑,无实际必要
解决方案

方案1(推荐):删除冗余代码,使用默认生成的构造器

不需要自定义构造器、也不需要单独定义websitetext属性,直接删除这部分冗余代码,Swift会自动生成接收contact参数的成员构造器,修改后的核心代码如下:

struct ContactsDetailView: View{
    let contact: Contact
    // 删除自定义init和多余的websitetext属性

    var body: some View {
        HStack{
            VStack {
                Image(contact.imageName)
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                    .frame(width: 100, height: 100)
                    .clipped()
                    .cornerRadius(50)
            
                Text(contact.name)
                    .font(.system(size: 21, weight:.medium, design: .default))
                Form{
                    HStack {
                        Text("Phone")
                        Spacer()
                        Text(contact.phone)
                            .foregroundColor(.gray)
                            .font(.callout)
                    }
                    Section{
                        // 直接读取contact.website即可
                        Link("Website", destination: URL(string: contact.website)!)
                    }
                }
            }
        }
    }
}

struct ResourcesDetailView_Previews: PreviewProvider {
    static var previews: some View {
        ContactsDetailView(contact: contacts[0]) // 此时调用正常,无报错
    }
}

方案2:保留自定义构造器时的正确写法

如果后续有逻辑必须在构造方法中处理,需要为自定义init明确声明入参,并且在构造方法中初始化所有存储属性:

struct ContactsDetailView: View{
    let contact: Contact
    let websitetext: String

    // 自定义构造器明确声明接收contact参数
    init(contact: Contact) {
        self.contact = contact // 必须完成contact属性的初始化
        self.websitetext = contact.website
    }

    // 其余body逻辑保持不变即可
}

内容的提问来源于stack exchange,提问作者Skyrifter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:33:20