Voir la section Référencement d'une classe ou d'un protocole Swift dans un en-tête Objective-C au https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html. Cela ressemble à une simple recommandation, mais d'après mon expérience, le compilateur l'applique réellement. J'ai généralement été capable de contourner le problème en utilisant des déclarations directes, comme décrit dans la publication Apple référencée ci-dessus, si j'avais vraiment besoin d'utiliser une classe Swift dans un en-tête, pas un fichier source.
Voici un exemple très simplifié. Tout d'abord un code Swift:
import Foundation
// A Swift protocol usable in Objective-C
@objc protocol MySwiftProtocol
{
func mySwiftProtocolFun();
}
// A Swift class conforming to the Swift protocol
class MySwiftClass : NSObject, MySwiftProtocol
{
func mySwiftProtocolFun() {
print("Hello from MySwiftClass!")
}
}
// Call an Objective-C function
aFunctionOC()
Next est un en-tête Objective-C qui utilise le protocole Swift:
#import "Foundation/Foundation.h"
// Forward declaration of a Swift protocol is OK here
@protocol MySwiftProtocol;
@interface MyClassOC : NSObject
// Here we've got a property conforming to the Swift protocol
@property id<MySwiftProtocol> prop1;
-(void)callSwiftProtocol;
@end
Mise en œuvre de MyClassOC
:
#import "objc.h"
#import "cli_swift-Swift.h"
@implementation MyClassOC
-(void)callSwiftProtocol
{
[self.prop1 mySwiftProtocolFun];
}
@end
Une autre classe Objective-C en utilisant MyClassOC
:
#import "objc.h"
#import "cli_swift-Swift.h"
// An Objective-C function that uses an Objective-C class
// that has a property conforming to a Swift protocol
void aFunctionOC()
{
MyClassOC * x = [[MyClassOC alloc] init];
x.prop1 = [[MySwiftClass alloc] init];
[x callSwiftProtocol];
}
Enfin, voici un en-tête pont exposant aFunctionOC()
à Swift:
void aFunctionOC();
si objectif-c ou rapide? c'est une énorme différence –
Si vous faites référence aux tags de question, les deux sont inclus car la question concerne l'intégration du code swift avec l'objectif-C. – aneuryzm
Essayez de nommer l'en-tête de pont comme ceci dans les paramètres de construction 'MyApp_Swift.h' –