2015-01-07 23 views
0

我可以在Objective-C中做到這一點,但我無法弄清楚如何使它在Swift中工作。我正在寫一個NSManagedObject的擴展,以便我可以隨時調用一個函數來創建一個新的實體。然後該函數將檢查現有實體是否匹配,如果沒有匹配,該函數將創建新實體並將其返回。如果有匹配,它將返回匹配。這裏是我的代碼:NSManagedObject上的Swift擴展

extension Chapter { 
    class func createChapter(i_d: Int, team_level: Int, location: String, name: String, school: String, image: UIImage, context: NSManagedObjectContext) -> Chapter { 

     var chapter : Chapter? 

     var request : NSFetchRequest = NSFetchRequest(entityName: "Chapter") 
     request.predicate = NSPredicate(format: "i_d = \(i_d)") 
     var error : NSError? 
     var results : [Chapter] = context.executeFetchRequest(request, error: &error) as [Chapter] 

     if error != nil{ 
      println(error) 
     } else if results.count == 1 { 
      println("Only found one Chapter match for id: \(i_d)") 
      chapter = results.first! 
     } else if results.count > 1 { 
      println("Found multiple Chapters for id: \(i_d)") 
      for chapter in results { 
       println(chapter.name) 
      } 
     } else { 
      chapter = NSEntityDescription.insertNewObjectForEntityForName("Chapter", inManagedObjectContext: context) as? Chapter 
      chapter?.i_d = i_d 
      chapter?.team_level = team_level 
      chapter?.location = location 
      chapter?.name = name 
      chapter?.school = school 
      chapter?.image = UIImagePNGRepresentation(image) 

      var error: NSError? = nil 
      if !context.save(&error) { 
       println("Saving error \(error), \(error?.userInfo)") 
      } else { 
       println("Saved a Chapter with id: \(i_d)") 
      } 
     } 

     return chapter! 
    } 
} 
  • 「i_d」是爲實體的唯一ID

這是我曾經是能夠在Objective-C調用像這樣(大致翻譯) :

Chapter *chapter = [Chapter createChapterWithID:i_d, team_level:team_level, location:location, name:name, school:school, image:image, context:context]; 

每當我試着像VAR第一章:第一章= Chapter.createChapter(...),Xcode中只允許我把另一Chapte r對象,而如果我嘗試從Chapter實例調用函數,則函數參數可以正確填寫。

我該如何解決我的問題?

編輯:

從答案的建議,我通過把「階級」在我的函數定義的前面,以及正確的函數創建我最初的變量,並在必要的地方加上問號固定我的代碼。

回答

1

您可以嘗試改爲創建一個便利的初始化。

http://devmonologue.com/ios/swift/swift-initializers-designated-convenience/

另外請注意,如果你想要做Chapter.createChapter(),createChapter需要一個類FUNC,在擴展它只是一個普通FUNC。所以它期望章節對象創建對象,而不是類。

變化

func createChapter ... 

class func createChapter ... 
+0

好,加上 「下課」 的功能,使得它現在的工作之前。但是,我想我可能會在函數定義的開頭部分錯誤地聲明Chapter變量。有什麼建議嗎? –

+0

我建議你問另一個問題,併發布相關的代碼。我不知道你是如何初始化章節對象的,因此很難說出發生了什麼事情。我也不知道你得到什麼錯誤。所以問一個新的問題,併發布所有相關的代碼和錯誤。 – Aggressor

+0

沒關係。只是玩了一些東西,並得到它的工作。我會把它作爲一個編輯 –