J'importe un cadre rapide dans un projet d'objective-c comme celui-ci:
@import MyFramework;
Le problème est que seules certaines classs sont reconnues par la class que j'importe.
La class qui est reconnue:
public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle { ... }
La class qui n'est pas:
public class VeediUtils { ... }
Ils sont tous deux publics alors pourquoi le premier est reconnu dans l'espace de travail et l'autre non?
Aussi, je vois dans le file d'en-tête MyFramework-Swift.h qu'une class
@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>
Apparaître tandis que l'autre ne pas
Pourquoi donc?
Aussi pour souligner que cette même procédure fonctionne quand j'importe un cadre rapide pour un projet rapide
Pour accéder à une class rapide dans objc, qui n'est pas héritée de NSObject, vous devez:
@objc public class VeediUtils
Une class ou un protocole Swift doit être marqué avec l'atsortingbut @objc pour être accessible et utilisable dans Objective-C. Cet atsortingbut indique au compilateur que ce morceau de code Swift est accessible depuis Objective-C. Si votre class Swift est un descendant d'une class Objective-C, le compilateur ajoute automatiquement l'atsortingbut @objc pour vous.
Si vous avez déjà configuré Project pour s'intégrer à Swift et que vous voulez utiliser Swift Dynamic Framework, vous devez l'importer de cette façon (dans {} vous devez mettre des noms appropriés dépend de votre projet):
#import <{MyFramework}/{MyFrameworkMainClass}-Swift.h> #import "{YourProjectTargetName}-Swift.h"
Vous devez append @objc
à la déclaration de la class VeediUtils
ou la faire hériter de NSObject
. Sinon, il ne sera pas visible pour Objective-C.
Dans votre cas, RecognizedClass
est reconnu car il s'agit d'une sous-class de UIViewController
, qui est une sous-class de NSObject
.