Objective-C でこれを行うことができますが、Swift で機能させる方法を理解するのに苦労しています。新しいエンティティを作成したいときにいつでも簡単に関数を呼び出せるように、NSManagedObject の拡張機能を作成しています。次に、関数は既存のエンティティの一致をチェックし、一致がない場合、関数は新しいエンティティを作成して返します。一致する場合は、一致を返します。これが私のコードです:
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 chap: Chapter = Chapter.createChapter(...)のようなものを試すたびに、Xcode では別の Chapter オブジェクトをパラメーター リストに入れることしかできませんが、Chapter インスタンスから関数を呼び出そうとすると、関数パラメーターがいっぱいになる可能性があります。元気で。
問題を解決するにはどうすればよいですか?
編集:
回答の提案から、関数定義の前に「クラス」を配置し、関数に初期変数を正しく作成し、必要な場所に疑問符を追加して、コードを修正しました。