J'ai un problème. J'ai un ancien projet Objective C et je souhaite appeler new Swift, j'ai créé le fichier "-Bridging-Header.h" et "-Swift.h"
c'était facile pour moi d'appeler la fonction de Swift à Objective C mais j'ai un problème pour inverser.
J'ai donc créé une classe simple "System.Swift"
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
maintenant, j'ai essayé de suivre la documentation ici et à l'intérieur du fichier <...> - Swift.h, j'ai écrit ceci
@class System;
@interface System : NSObject
-(void)printSome;
@end
et je l’ai importé dans ma classe Objective C. À ce stade de ma classe Objective C (actuellement UIViewController) de mon code Objective C, j’ai essayé d’appeler la méthode "printSome":
- (void)viewDidLoad
{
[super viewDidLoad];
System * sis = [[System alloc] init];
[sis printSome];
//any additional setup after loading the view from its nib.
}
maintenant, j'ai l'erreur de suivi:
Symboles non définis pour l'architecture i386: "_OBJC_CLASS _ $ _ System", référencé depuis: objc-class-ref dans "ObjectiveC_Class_That_Call_Call_Shift_Object" .o ld: symbole (s) non trouvé (s) pour l'architecture i386 -v voir l'invocation)
Quelqu'un peut m'aider?
Cordialement à tous.
Problème résolu, j'ai précédemment créé et inclus un nouveau .h
fichier dans ma Objective-C classe nommée <ProductModuleName>-Swift.h
mais, comme je l’ai découvert plus tard, cette étape n’est pas nécessaire car le compilateur crée le fichier invisible nécessaire.
Inclure simplement <ProductModuleName>-Swift.h
dans votre classe et ça devrait marcher.
Oui merci
c'est étrange mais ça va marcher
1) Add @objc to Swift class
2) Add in .m
#import "(ProjectName)-Swift.h"
3) Call from .h
@class SwiftClass;
4)On SwiftClass
click "Command" + Left Click (Apple Documantation)
5) To see "-Swift.h" -> click "Command" + Left Click
App va générer l'interface pour cette classe dans -Swift.h
Exemple: Swift_CLASS ("_ _TtC10Project17220PLHelper") @interface PLHelper
Supposons que nous avons ProjectName "MyFirstProjectOnSwift" et Swift nom de classe "mySwiftClass" et la classe objectiveC est "MyObjectiveCLass"
Les étapes suivantes sont: -
Ajoutez #import "MyFirstProjectOnSwift-Swift.h" dans "MyObjectiveCLass.m"
Ajouter @class mySwiftClass dans MyObjectiveCLass.h;
Puis dans MyObjectiveCLass.m
mySwiftClass * myClass = [mySwiftClass new]; {Call Like This dans n’importe quelle méthode, où que vous souhaitiez appeler Swift.}
[myClass methodName];
Vérifiez le fichier -Swift.h qui contient l'importation sur votre fichier .m dans Objective-C:
#import <YourProjectName-Swift.h>
Cliquez sur cette ligne et cliquez gauche - Aller à la définition.
Ce fichier doit être inclus automatiquement, pas manuellement.
Si vous ne voyez toujours pas votre classe, même après avoir importé <ProductModuleName>-Swift.h
.
Assurez-vous que votre classe sous-classe une classe native (par exemple, UIViewController
) ou au moins s'il s'agit simplement d'une classe utilitaire, créez-la sous-classe NSObject
. Votre classe devrait maintenant montrer.