在 Xcode 6.1 中以及关于 Failable Initializers 的博文在 Swift 博客上,Apple 已在可失败的初始化程序中分配给 self。
博客文章中的 Int (init(fromString:)) 示例在复制到我的项目并赋值给自己时编译正常,但是在我自己的代码中使用自定义类尝试此操作会导致常见错误“无法分配给方法中的“ self ””。
extension Contact {
public convenience init?(context: NSManagedObjectContext = DataStore.managedObjectContext) {
if let userId = User.loggedInUserId(context) {
let contact = NSEntityDescription.insertNewObjectForEntityForName("Contact", inManagedObjectContext: context) as Contact
self = contact
} else {
return nil
}
}
}
(Contact是NSManagedObject的子类)
我是否遗漏了可失败初始化器的任何内容?
最佳答案
Assigning to self
仅适用于值类型,struct
和 enum
。
在你的情况下你应该这样做:
public convenience init?(context: NSManagedObjectContext) {
let entity = NSEntityDescription.entityForName("Contact", inManagedObjectContext: context);
self.init(entity: entity!, insertIntoManagedObjectContext: context)
if User.loggedInUserId(context) == nil {
context.deleteObject(self)
return nil
}
}
您必须无条件地调用self.init(..)
,因为这是convenience
初始化程序的规则。
如果条件为 false
,则 deleteObject(self)
并 返回 nil
。嗯...我认为你不应该使用
可失败的初始值设定项。
关于ios - 无法在方法中分配给自己 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26476964/