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

Swift中Person类能否声明自身类型可选属性husband?正确实现方式是什么

Swift Person类实现问题解答

核心疑问解答

  • 类中定义let husband: Person?的写法完全合法
    类的属性类型可以是自身类的可选类型,符合OOP设计逻辑,没有语法错误,你对OOP的理解在此处没有问题。
  • 你期望的初始化写法不合法,存在三个问题:
    1. 当前定义的Person类只有两个参数的构造器,没有包含husband参数的构造器,无法直接传入第三个参数
    2. 你传入的(name: "John", suname: "Williams")是元组类型,不是Person类的实例,不能直接赋值给类型为Person?的属性
    3. 示例初始化代码存在两处笔误:字符串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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:36:06