2014-09-30 8 views
16

Ich habe eine Xcode-generierte NSManagedObject-Klasse für mein CoreData-Modell.Warum ist die Erweiterung meiner Swift-Klasse außerhalb der definierenden Datei nicht sichtbar?

@objc(SomeClass) class SomeClass : NSManagedObject { /* ... */ } 

Es ist in einer Datei mit dem Namen 'SomeClass.swift' definiert. Ich möchte diese Klasse erweitern, also habe ich 'SomeClassExtension.swift' erstellt. Ich definiere die Erweiterung wie folgt:

extension SomeClass { 
    class func typeMethod1() {} 
    func instanceMethod2() {} 
} 

Diese Erweiterungsmethoden können innerhalb dieser definierenden Datei verwendet werden, aber sie sind nicht sichtbar außerhalb davon. Was verursacht dieses Problem?

Antwort

33

Es klingt wie Ihre neue Datei (SomeClassExtension.swift) nicht in das richtige Ziel aufgenommen wurde. Überprüfen Sie die Zielmitgliedschaft der Datei, indem Sie die Datei in Xcode auswählen und dann den Dateiinspektor öffnen (Menü Ansicht> Dienstprogramme> Dateiinspektor anzeigen). Stellen Sie sicher, dass die korrekten Ziele unter der Überschrift Zielmitgliedschaft überprüft werden.

+2

Ich habe das Ziel deaktiviert und erneut überprüft. Das hat es für mich behoben. – Sam

+0

hat hier nicht geholfen – brainray

+0

Hat jemand herausgefunden, was das Problem war? –

0

Ich sehe keine öffentlichen Modifikatoren auf diesen Methoden.

+1

Alles in Swift ist standardmäßig "intern", daher sollten Deklarationen in einer Datei sichtbar sein, um in einem anderen Code zu codieren, solange sie Teil desselben Build-Ziels sind. –

+0

Ja das ist eigentlich ein fairer Punkt. Wenn alles im selben Ziel ist. –

+0

@NateCook Hallo, Nate. Gibt es also eine Möglichkeit, die Definitions- und Implementierungsdetails (für beide Anzeigemethoden von var) in Swift so zu verstecken, wie man es in Objective-C tun könnte, indem man Dinge nur in .m-Dateien ablegt? Vielen Dank. – Unheilig