Swift中结构体两种参数初始化方式的区别及正确性分析
Swift结构体两种初始化方式的区别说明
核心结论
两种写法都是完全合法正确的,运行时调用效果没有任何差异,唯一区别在于初始化器的来源不同。
具体差异
- 第一种写法的初始化器是Swift自动生成的默认成员逐一初始化器(Memberwise Initializer):只要结构体没有声明任何自定义的
init方法,Swift就会自动为所有存储属性生成对应参数的初始化器,无需手动编写,代码更简洁。 - 第二种写法是手动实现了和自动生成版逻辑完全一致的初始化器:只要你在结构体中手动声明了任意初始化方法,Swift就不会再自动生成默认的成员逐一初始化器。
适用场景
- 无额外初始化逻辑时优先用第一种写法,减少冗余代码。
- 需要做初始化额外处理时再选择手动写
init,比如参数合法性校验、属性计算赋值、修改初始化器的参数标签/默认值等,示例如下:
struct Fruit { let name: String // 可失败初始化器,限制名称不能为空 init?(name: String) { guard !name.isEmpty else { return nil } self.name = name } }
内容的提问来源于stack exchange,提问作者Axel
相关产品推荐
相关产品推荐

