[英]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
僅適用於值類型, 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)
並return nil
。 嗯......我認為你不應該使用可用的初始化器。
便捷初始化程序必須從同一個類調用指定的初始值設定項。 您可以創建一個接收和復制Contact
實例的指定初始化程序,而不是分配給self
嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.