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
相关产品推荐
相关产品推荐

