2016-12-21 2 views
0

Warum diese Methode + (instancetype)arrayWithNSData:(NSData *)data;Einige Objective-C-Methoden sind unsichtbar in Swift 3

in j2obj Projekt

https://github.com/google/j2objc/blob/master/jre_emul/Classes/IOSPrimitiveArray.h#L252

unsichtbar für swift3?

aber die anderen sind sichtbar. diese zum Beispiel:

+ (instancetype)newArrayWithBytes:(const jbyte *)buf count:(NSUInteger)count;

+0

Sind Sie sicher, dass es unsichtbar ist? Normale Importeurregeln würden dies in einen Initialisierer umwandeln - suchen Sie in der Ansicht "generierte Schnittstelle" von Xcode nach etwas wie "init (nsData:)". – rickster

+0

@ Rickster, danke. Mein Fehler. – Vyacheslav

+0

Keine Sorge ... konvertiert den Kommentar in eine Antwort, so dass es für andere hilfreicher ist. – rickster

Antwort

2

Fabrik Methoden in ObjC - das heißt, Klassenmethoden, die instancetype (oder die tatsächliche Art der Klasse) und beginnen mit dem gemeinsamen Namen der Klasse zurückkehren - erhalten zu Swift importiert als Initialisierer.

So eine Methode +(instancetype)arrayWithSomething: auf einer Klasse, deren Name Array enthält, wird als init(something:) importiert. In Ihrem Fall wird +arrayWithNSData: als init(nsData:) importiert werden. (Man könnte denken, es würde die „NS“ fallen, da es auch den Parametertyp Äquivalent von NSData seinen Swift Wert Typ Foundation.Data konvertieren werde ... aber es funktioniert nicht.)

Um dies zu finden und andere Importer-Effekte, Sie können das Ergebnis für sich selbst in Xcode sehen, indem Sie die Ansicht "Generated Interface" Ihrer Quelle betrachten. Klicken Sie auf die Schaltfläche für verwandte Elemente links neben der Sprungleiste oder den Assistenten.

Für weitere Details lesen Sie bitte über Initialization in Apples Verwendung von Swift mit Kakao und Objective-C doc.

+0

Wo hast du das gelesen? – Vyacheslav

+0

'init (nsData:)' ist korrekt – Vyacheslav