swift - 在 init 中调用方法时遇到问题

标签 swift

我有这个:

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()

如您所见,您正在使用 selfdate 尚未初始化。

在调用实例方法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"
    }
}

一些改进

  1. 如果 date 应该包含...一个数据,那么它的类型应该是 NSDate,而不是 String
  2. 如果 date 属性应该指示值创建的时间,那么您可以在属性声明中为其分配 = NSDate()
  3. 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/

相关文章:

ios - 有没有办法用脚本创建一个 swift 类并在预构建中添加属性?

ios - 多个 GMSMarker 显示/隐藏耗时

ios - 是否需要请求 Siri 授权?

python - 我无法使用 PythonKit 在 Xcode 11 中导入 Python 模块

ios - 如何在没有很多 xib 的情况下显示多个 View Controller

swift - SceneKit游戏架构,ViewController之间的通信

ios - UIScrollView 不工作/宽度和高度错误

ios - Swift 在背景中有图像不随 subview 改变

arrays - 将 Array 作为参数传递给函数时出现“[String].Type”错误

ios - 在 Swift 中将 Double 转换为 NSNumber 会失去准确性