gpt4 book ai didi

swift - 初始化类的实例时,顺序是什么?

转载 作者:行者123 更新时间:2023-11-28 10:57:51 25 4
gpt4 key购买 nike

class Actor {
let agent: String? = "nobody"

init(agent: String){
self.agent = agent // error: immutable value 'self.agent' may only be initialized once
}
}

let John = Actor(agent: "xyz")

我对这里发生的序列感到困惑(我完全清楚varlet 之间的区别)。但为什么我会收到该错误?

  • 如果我正在使用 init 方法,那是否意味着我没有使用默认参数?
  • 为什么我不能用另一个更改默认常量?

最佳答案

您不能多次分配一个 let 变量 - 但是,您可以定义它并使其保持未初始化状态。然后在您的 init 方法中,您可以将 "nobody" 作为 agent 参数的默认值。

class Actor {
let agent: String

init(agent: String = "nobody"){
self.agent = agent
}
}

print(Actor().agent) // "nobody"
print(Actor(agent: "xyz").agent) // "xyz"

正如 Alexander 在下面的评论中所建议的,如果您的 init 方法中有太多参数,默认值可能会变得有点困惑。考虑创建一个单独的 init 方法来设置默认值。

class Actor {
let agent: String
...

init() {
self.agent = "nobody"
...
}

init(agent: String, ...){
self.agent = agent
...
}
}

关于swift - 初始化类的实例时,顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com