我有这个:
class SomeClass {
let title: String
let content: String
let date: String?
init(title: String, content: String) {
self.title = title
self.content = content
self.date = getDateString()
}
func getDateString() -> String {
return "A date"
}
}
但是,我收到编译器错误“在初始化所有存储的属性之前,在 getDateString() 中使用“self”方法调用”。只想使用一种方法在我的 init() 中设置一些东西。我该如何解决这个问题?任何指针将不胜感激。
最佳答案
在所有存储的属性都被初始化之前你不能使用 self
规则很简单,你在这里违反了
self.date = getDateString()
事实上这一行等同于
self.date = self.getDateString()
如您所见,您正在使用 self
而 date
尚未初始化。
在调用实例方法getDateString()
之前必须初始化date
。
类方法
如果你真的要调用一个方法来初始化date
,它必须是一个类方法
class SomeClass {
let title: String
let content: String
let date: String?
init(title: String, content: String) {
self.title = title
self.content = content
self.date = SomeClass.getDateString()
}
class func getDateString() -> String {
return "A date"
}
}
一些改进
- 如果
date
应该包含...一个数据,那么它的类型应该是 NSDate,而不是String
- 如果
date
属性应该指示值创建的时间,那么您可以在属性声明中为其分配= NSDate()
created
是此属性的更好名称
这 3 条建议来自用户 user3441734
的评论。
这是更新后的代码
class SomeClass {
let title: String
let content: String
let created = NSDate()
init(title: String, content: String) {
self.title = title
self.content = content
}
}
关于swift - 在 init 中调用方法时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34380726/