Lavorare su un framework misto. importato all'interno del file Obj-C ma le classi interne non sono visibili, solo quelle pubbliche.Come accedere a una classe Swift interna in Objective-C all'interno dello stesso framework?
La documentazione afferma chiaramente i clasees interni dovrebbero essere disponibili tra la Swift e Obj-C:
Importazione Swift in Objective-C
Per importare un insieme di file Swift nella stessa destinazione quadro come la vostra Codice Objective-C, non è necessario importare nulla nell'intestazione dell'ombrello per il framework. Invece, importa il file di intestazione generato da Xcode per il tuo codice Swift in qualsiasi file Objective-C .m da cui vuoi utilizzare il tuo codice Swift. Poiché l'intestazione generata per una destinazione quadro fa parte dell'interfaccia pubblica del framework , solo le dichiarazioni contrassegnate con il modificatore pubblico vengono visualizzate nell'intestazione generata per un obiettivo quadro. È possono ancora utilizzare i metodi e le proprietà che sono contrassegnati con il modificatore interna dall'interno della parte Objective-C del quadro Swift, finché sono dichiarate all'interno di una classe che eredita da una classe Objective-C . Per ulteriori informazioni sui modificatori del livello di accesso, vedere Access Control in The Swift Programming Language (Swift 2).
codice di esempio (Creare un nuovo progetto con un quadro)
// 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
Bello! Non sapevo di quella macro e Google non mostra molto. Hai qualche riferimento dai documenti Apple? – Yariv
Bello? Questo è orribilmente prolisso e disordinato. E 'davvero questo quello che devi fare? Ho incontrato lo stesso problema e anche la mela avrebbe dovuto riuscire a fare qualcosa di meglio. Ho intenzione di rinunciare a questo e tornare all'obiettivo c, questo è irragionevole! +1 per pubblicare qualcosa che funzioni effettivamente (dopo ore di ricerca). –
Secondo la documentazione di Apple "È ancora possibile utilizzare i metodi e le proprietà Swift contrassegnati con il modificatore interno dalla parte Objective-C del framework, a condizione che vengano dichiarati all'interno di una classe che eredita da una classe Objective-C", se la classe swift deriva da un'altra classe objc, dovrebbe essere disponibile nel codice objc. Ho un problema simile e ho contrassegnato la mia classe veloce con @objc e eredita da NSObject ma non è ancora disponibile nel codice objc. – puru020