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

Swift结构体能否无值初始化?如何实现空构造?

Swift中空结构体的实现方案及你的问题解决办法

你写的空init(){}编译失败,核心原因是Swift要求结构体的所有存储属性必须在初始化流程结束前完成赋值,你的空构造器里没有给pergunta和resposta`赋值,所以无法通过编译。下面给你几种可行的解决方式:


最优方案:把popularQuiz改成静态方法

既然你调用这个方法不需要依赖实例的属性,完全没必要创建空实例,直接把方法改成**类型方法(静态方法)**即可,这样不用初始化结构体就能调用:

struct Quiz {
    var pergunta: String
    var resposta: Bool

    init(pergunta: String, resposta: Bool) {
        self.pergunta = pergunta
        self.resposta = resposta
    }

    // 用static修饰,变成类型方法
    static func popularQuiz() -> [Quiz] {
        // 这里写你的逻辑,比如返回多个Quiz实例
        return [
            Quiz(pergunta: "Pergunta 1", resposta: true),
            Quiz(pergunta: "Pergunta 2", resposta: false)
        ]
    }
}

// 直接通过类型名调用方法
let quizzes = Quiz.popularQuiz()

如果一定要保留实例方法(不推荐)

如果你坚持要通过空实例调用这个方法,有两种实现方式:

方式1:给存储属性设置默认值

给pergunta和resposta加上默认值,这样空构造器可以正常工作(甚至Swift会自动生成空构造器,不用手动写):

struct Quiz {
    // 给属性添加默认值
    var pergunta: String = ""
    var resposta: Bool = false

    init(pergunta: String, resposta: Bool) {
        self.pergunta = pergunta
        self.resposta = resposta
    }

    // 空构造器可以省略,Swift会自动生成,手动写也没问题
    init() {}

    func popularQuiz() -> [Quiz] {
        // 你的实现逻辑
        ...
    }
}

// 创建空实例并调用方法
let emptyQuiz = Quiz()
let quizzes = emptyQuiz.popularQuiz()

方式2:在空构造器里显式赋值

如果不想给属性加默认值,就在空构造器里直接给两个属性赋值初始值:

struct Quiz {
    var pergunta: String
    var resposta: Bool

    init(pergunta: String, resposta: Bool) {
        self.pergunta = pergunta
        self.resposta = resposta
    }

    init() {
        // 显式给两个属性赋值
        self.pergunta = ""
        self.resposta = false
    }

    func popularQuiz() -> [Quiz] {
        // 你的实现逻辑
        ...
    }
}

总结

优先选择静态方法的方案,因为popularQuiz是生成Quiz实例的工厂逻辑,属于类型本身的功能,和单个实例的状态无关,这样代码结构更清晰合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:15:31