Arbeiten an einem gemischten Rahmen. importiert in die Obj-C-Datei, aber die internen Klassen sind nicht sichtbar, nur die öffentlichen.Wie kann man innerhalb desselben Frameworks auf eine interne Swift-Klasse in Objective-C zugreifen?
Die Dokumentation deutlich die interne clasees Staaten sollte zwischen Swift und Obj-C zur Verfügung: als
Importieren von Swift in Objective-C
So importieren Sie eine Reihe von Swift-Dateien im gleichen Rahmen Ziel Ihrer Objective-C-Code, Sie müssen nicht müssen alles in den Regenschirm-Header für das Framework importieren. Importieren Sie stattdessen die Xcode-generierte Header-Datei für Ihren Swift-Code in eine Objective-C .m-Datei, von der Sie Ihren Swift-Code verwenden möchten. Da der generierte Header für ein Framework-Ziel Teil der öffentlichen Schnittstelle des Framework ist, werden in der generierten Kopfzeile für ein Framework-Ziel nur Deklarationen angezeigt, die mit dem öffentlichen Modifikator markiert sind. Sie noch Swift Methoden und Eigenschaften verwenden, die mit dem internen Modifikator innerhalb des Objective-C Teils des Rahmens markiert sind, so lange werden sie innerhalb einer Klasse deklarieren, die von einer Objective-C-Klasse erbt . Weitere Informationen zu Zugriffsmodifikatoren finden Sie unter Access Control in The Swift Programming Language (Swift 2).
Codebeispiel (Erstellen Sie ein neues Projekt mit einem Rahmen)
// SwiftObject.swift
public class SwiftObject: NSObject {
public class func doSomething() {}
}
internal class YetAnotherSwiftObject: NSObject {
internal class func doSomething() {}
}
// SomeObject.m file
@implementation SomeObject
- (void)someMethod {
[SwiftObject doSomething];
}
- (void)someOtherMethod {
[YetAnotherSwiftObject doSomething]; // Use of undeclared identifier
}
@end
Schön! Ich wusste nicht über dieses Makro und Google zeigt nicht viel. Haben Sie eine Referenz aus den Apple-Dokumenten? – Yariv
Schön? Das ist schrecklich ausführlich und chaotisch. Ist das wirklich was du tun musst? Ich bin auf dasselbe Problem gestoßen, und selbst Apple hätte etwas Besseres machen können. Ich gebe das auf und gehe zurück zum Ziel c, das ist unvernünftig! +1 für das Posten von etwas, das tatsächlich funktioniert (nach stundenlanger Suche). –
Laut Apple-Dokumentation "Sie können Swift-Methoden und -Eigenschaften, die mit dem internen Modifikator markiert sind, weiterhin innerhalb des Objective-C-Teils Ihres Frameworks verwenden, solange sie in einer Klasse deklariert sind, die von einer Objective-C-Klasse erbt." Wenn die Swift-Klasse von einer anderen Objc-Klasse abgeleitet wird, sollte sie in Objc-Code verfügbar sein. Ich habe ein ähnliches Problem und ich habe meine Swift-Klasse mit @objc markiert und es erbt von NSObject, aber immer noch nicht in Objc-Code. – puru020