我有一个叫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)时,我需要一个由func loadFromFile返回的新对象。如何分配init方法或返回新对象?
它给出了错误:
不能赋值:“自我”是不可变的
发布于 2014-10-18 15:35:37
返回该类实例的类函数似乎是Swift中的反模式。您会注意到,像[NSString stringWithString:@"some other string"]这样的"with“Objective类方法将转换为”使用“-less方便初始化器:NSString(string: "some other string")。
此外,您还需要在方便的初始化器中使用委托给指定的初始化器。
此外,由于您定义了原始类,并且2)不需要与指定的初始化器不同范围的方便初始化器,所以我认为没有任何理由将其放在扩展中。
把它们放在一起:
class Letter {
init() { … }
convenience init(filePath: String) {
self.init()
loadFromFile(filePath)
}
func loadFromFile(filePath: String) { … }
}
let letter1 = Letter()
letter1.loadFromFile("path1")
let letter2 = Letter(filePath: "path2")总之,在Swift中将赋值给self的类比是调用一个初始化器。
如果这对你有用,请告诉我!
发布于 2014-10-18 15:41:36
你不能分配给自己。像这样的东西呢?
class Letter {
}
extension Letter {
convenience init(filePath: String) {
self.init()
// code to load a Letter from a file goes here.
}
class func loadFromFile(filePath: String) -> Letter {
return Letter(filePath: filePath)
}
}https://stackoverflow.com/questions/26440263
复制相似问题