0

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 インスタンスから関数を呼び出そうとすると、関数パラメーターがいっぱいになる可能性があります。元気で。

問題を解決するにはどうすればよいですか?

編集:

回答の提案から、関数定義の前に「クラス」を配置し、関数に初期変数を正しく作成し、必要な場所に疑問符を追加して、コードを修正しました。

4

1 に答える 1

1

代わりに、便利な init を作成してみてください。

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

また、Chapter.createChapter() を実行する場合、createChapter はクラス関数である必要があり、拡張機能では通常の関数である必要があります。したがって、章オブジェクトがクラスではなくオブジェクトを作成することを期待しています。

変化する

func createChapter ...

class func createChapter ...
于 2015-01-07T17:48:28.393 に答える