我有一堂课叫Letter
class Letter
{
init() {}
}
Run Code Online (Sandbox Code Playgroud)
我对这个类有一个扩展:
extension Letter
{
convenience init(file_path:String) {
self = Letter.loadFromFile(file_path)
}
class func loadFromFile(file_path:String)->Letter {...}
}
Run Code Online (Sandbox Code Playgroud)
我需要使用文件路径创建和初始化,当我调用时,Letter(file_path)我需要一个由 func 返回的新对象loadFromFile。如何在 init 方法中赋值或返回一个新对象?
它给出了错误:
无法赋值:“self”是不可变的
返回该类实例的类函数似乎是 Swift 中的反模式。您会注意到“with”Objective-C 类方法像[NSString stringWithString:@"some other string"]“with”-less 便利初始化器一样进行了转换:NSString(string: "some other string")。
此外,您需要从便利初始化程序中委托给指定的初始化程序。
\n\n另外,由于您 1) 定义原始类,并且 2) 不需要范围与指定初始值设定项不同的便利初始值设定项,所以我认为没有任何理由将其放置在扩展中。
\n\n将它们放在一起:
\n\nclass Letter {\n init() { \xe2\x80\xa6 }\n\n convenience init(filePath: String) {\n self.init()\n loadFromFile(filePath)\n }\n\n func loadFromFile(filePath: String) { \xe2\x80\xa6 }\n}\n\nlet letter1 = Letter()\nletter1.loadFromFile("path1")\n\nlet letter2 = Letter(filePath: "path2")\nRun Code Online (Sandbox Code Playgroud)\n\n总之,在 Swift 中分配给 self 的类比就是调用初始化器。
\n\n让我知道这是否适合您!
\n| 归档时间: |
|
| 查看次数: |
8467 次 |
| 最近记录: |