Swift中Person类能否声明自身类型可选属性husband?正确实现方式是什么
Swift Person类实现问题解答
核心疑问解答
- 类中定义
let husband: Person?的写法完全合法
类的属性类型可以是自身类的可选类型,符合OOP设计逻辑,没有语法错误,你对OOP的理解在此处没有问题。 - 你期望的初始化写法不合法,存在三个问题:
- 当前定义的Person类只有两个参数的构造器,没有包含husband参数的构造器,无法直接传入第三个参数
- 你传入的
(name: "John", suname: "Williams")是元组类型,不是Person类的实例,不能直接赋值给类型为Person?的属性 - 示例初始化代码存在两处笔误:字符串
Anna没有加双引号,属性名suname拼写错误,正确拼写为surname
正确实现方案
补充带husband参数的构造器
class Person { let name: String let surname: String let husband: Person? // 给husband设置默认值nil,不需要该参数时可以省略 init(name: String, surname: String, husband: Person? = nil) { self.name = name self.surname = surname self.husband = husband } }
正确的初始化写法
// 写法1:先创建husband实例再传入 let husband = Person(name: "John", surname: "Williams") let p1 = Person(name: "Anna", surname: "Jehnis", husband: husband) // 写法2:嵌套创建Person实例直接传入 let p2 = Person(name: "Anna", surname: "Jehnis", husband: Person(name: "John", surname: "Williams"))
如果确实需要简化为元组形式的入参,可以扩展对应的便利构造器,常规开发更推荐上述显式创建实例的写法,可读性和可维护性更高。
内容的提问来源于stack exchange,提问作者Alex2004
相关产品推荐
相关产品推荐

