Swift成员明智的初始值设定项不包含具有默认常量属性的参数

时间:2019-12-12 13:50:33

标签: swift

案例1

struct User {
  let name: String
  let age: Int
}

可用的成员明智的初始化程序:User(name: String, age: Int)

案例2

struct User {
  let name: String
  let age = 1
}

可用的成员明智的初始化程序:User(name: String)

案例3

struct User {
  let name: String
  var age = 1
}

可用的成员明智的初始值设定项:

  • User(name: String)
  • User(name: String, age: Int)

问题

在情况2中,除非您将结构实例创建为变量,否则无法设置属性age的值。

这是设计使然吗?还是这是Swift的成员明智的初始化程序中的限制?

1 个答案:

答案 0 :(得分:3)

是的,这是设计使然。 age在这里是一个常数,只能设置一次。如果要使用常量的默认值,请编写一个初始化程序。

struct User {
    let name: String
    let age: Int

    init(name: String, age: Int = 1) {
        self.name = name
        self.age = age
    }
}