无法在方法Swift中为self赋值



在Xcode 6.1中,随着Swift博客上关于Failable Initializers的博客文章,苹果将self分配给了一个Failable initializer。

博客文章中的Int(init(fromString:))示例在通过对self的赋值复制到我的项目中时编译良好,但在我自己的代码中使用自定义类进行尝试会导致常见的错误"无法在方法中分配给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的子类)

故障初始化程序有什么遗漏吗?

分配给self仅适用于值类型structenum

在你的情况下,你应该这样做:

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初始值设定项的规则。如果条件是falsedeleteObject(self)return nil。嗯…我认为你不应该使用此的故障初始化程序。

便利初始化器必须从同一类调用指定的初始化器。您可以创建一个指定的初始值设定项来获取和复制Contact实例,而不是分配给self吗?

相关内容

  • 没有找到相关文章

最新更新