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

Swift中如何正确调用定义在子类内部的嵌套struct结构体

问题解决思路

错误原因

报错核心原因是:嵌套在类内部的结构体属于类型级成员,归类本身所有,不属于类的实例对象,所以无法通过实例调用,必须通过类名直接访问该内部类型。

正确实现方式

分两种常见场景提供方案:

场景1:仅需要单独创建Test结构体实例

不需要和SubMain实例绑定时,直接通过SubMain.Test调用构造器即可:

// 直接创建Test实例
let testInstance = SubMain.Test(number1: 15, number2: 20)
// 取值验证
print(testInstance.number1) // 输出15
print(testInstance.number2) // 输出20

场景2:需要让SubMain实例同时持有name、number1、number2三个值

需要先修改SubMain的定义,新增存储Test的属性,可选新增便利构造器简化赋值流程:

class SubMain: Main {
    // 新增存储Test结构体的属性
    var test: Test?
    
    override init(name: String) {
        super.init(name: name)
    }
    
    // 可选:新增便利构造器,初始化时直接完成三个参数赋值
    convenience init(name: String, number1: Int, number2: Int) {
        self.init(name: name)
        self.test = Test(number1: number1, number2: number2)
    }

    struct Test {
        var number1: Int
        var number2: Int
    }
}

使用方式二选一即可:

  • 方式1:用便利构造器一步初始化
let subMain = SubMain(name: "hello", number1: 15, number2: 20)
// 读取对应值
print(subMain.name) // 输出hello
print(subMain.test?.number1) // 输出15
print(subMain.test?.number2) // 输出20
  • 方式2:先创建SubMain实例,再单独赋值Test属性
let subMain = SubMain(name: "hello")
subMain.test = SubMain.Test(number1: 15, number2: 20)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:54:03