swift - Swift 类中的初始化程序
问题描述
我是从其他语言来到 Swift 的。我有时会在定义一个类时使用一种模式,在该类中,初始化程序调用另一个函数,该函数稍后会被调用以重新初始化。
class Test {
var thing: String
init() {
reinit() // 'self' used in method call 'load' before all stored properties are initialized
} // Return from initializer without initializing all stored properties
func renit() {
self.thing = "Hello"
}
}
在这种情况下,它不起作用。我真的不想写两次初始化代码,而且我不能使用test.init()
,显然是要重新初始化。
这样做的正确方法是什么?
更新
一些评论表明这是一个糟糕的设计,而且很可能是这样。当然,在现实中,应用程序不会那么简单。
关键是我可以用其他语言这样做,所以我想知道 Swift 中的正确方法是什么。
解决方案
一种方法是制作thing
成隐式展开的可选项。这听起来很危险,但实际上它只是回归到几乎所有其他语言所做的事情(例如,Java、Ruby、Python、JS,所有对象引用的行为都像 IUO)。
或者,您复制分配。如果值很复杂,您可以提取,如下所示:
class Test {
var thing: String
init() {
self.thing = generateThing()
}
func renit() {
self.thing = generateThing()
}
func generateThing() -> String { "Hello" }
}
推荐阅读
- c - 以递归方式打印具有其他列表(相同结构)元素的列表
- powershell - PowerShell 远程启动进程不起作用
- c# - 列表的扩展方法
无法识别 C# 类的实例方法 - javascript - 从已删除的 DOM 元素中分离 jQuery 侦听器
- css - 为什么在 2d 比例变换期间文本变得模糊和摆动
- ios - CollectionView 滚动更改选定的单元格
- spring-cloud-dataflow - 使用 Spring Cloud 数据流注册自定义 Spring Cloud 任务
- javascript - 如何根据输入的值更改输入的背景颜色
- reactjs - ReactJS - 在状态中存储 API 数据
- php - sql中的MAX()函数仅返回数字的第一个字符