【发布时间】:2014-12-13 22:29:09
【问题描述】:
我有一个班级叫Letter
class Letter
{
init() {}
}
我有这个类的扩展:
extension Letter
{
convenience init(file_path:String) {
self = Letter.loadFromFile(file_path)
}
class func loadFromFile(file_path:String)->Letter {...}
}
我需要使用文件路径创建和初始化,当我调用Letter(file_path) 时,我需要一个由函数loadFromFile 返回的新对象。如何在 init 方法中赋值或返回一个新对象?
它给出了错误:
无法赋值:'self' 是不可变的
【问题讨论】:
-
你为什么有一个扩展?只需将您的便利初始化程序放入类中即可。那就是它所属的地方。
-
恰恰相反,恕我直言。将便利初始化程序保留在扩展中,但从主类中删除 init(file_path:String) 初始化程序。 Letter 类的用户可以直接调用 Letter.loadFromFile()。
-
它还说我不能分配给自己,Letter 类的用户可以直接调用 Letter.loadFromFile() -- 是的,但我想让它更容易理解)跨度>
-
这个提议的 API 有点像 Objective-C 的 je ne sais quoi。我建议完全消除
loadFromFile。