簡體   English   中英

無法在方法中分配給自己 - Swift

[英]Cannot assign to self in a method - Swift

在Xcode 6.1和Swift Blog上關於Failable Initializers的博客文章中,Apple已經在一個可用的初始化程序中分配了自己。

博客文章中的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的子類)

可用的初始化器有什么我缺少的嗎?

分配給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初始化器的規則。 如果條件為false ,則deleteObject(self)return nil 嗯......我認為你不應該使用可用的初始化器。

便捷初始化程序必須從同一個類調用指定的初始值設定項。 您可以創建一個接收和復制Contact實例的指定初始化程序,而不是分配給self嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM