2015-09-29 4 views
1

Je suis nouveau dans le développement iOS. J'ai créé une classe rapide comme suit:Impossible de trouver la déclaration de protocole pour 'WCSessionDelegate'

import WatchConnectivity; 
import HealthKit; 
@objc class Blah : NSObject, WCSessionDelegate { 
... 
} 

J'ai besoin @objc pour que je puisse utiliser cette classe d'Objective-C (qui existe déjà). Le problème est que lorsque le compilateur crée le pont [productName] -Swift.h, il se plaint qu'il ne peut pas trouver WCSessionDelegate. Erreur exacte:

Impossible de trouver la déclaration de protocole pour 'WCSessionDelegate'; vouliez-vous dire 'NSURLSessionDelegate'?

SWIFT_CLASS("_TtC8test8Blah") 
@interface Blah: NSObject <WCSessionDelegate> 

Au lieu de mettre en œuvre ce délégué, si je change à ce qui suit, il fonctionne.

@objc class Blah : NSObject { 
    ... 
    func setSessionDelegate(delegate:WCSessionDelegate) -> Blah { 
    self.mDelegate = delegate; 
    return(self) 
    } 
} 

Je préfère l'ancienne méthode. Comment puis-je résoudre cette erreur de compilation? Merci

+0

Avez-vous trouvé une solution? – Yizhar

Répondre

0

Il semble que le fichier [productName]-Swift.h ajoute le comprennent que si mosules sont pris en charge:

#if defined(__has_feature) && __has_feature(modules) 
@import ObjectiveC; 
@import WatchConnectivity; 
@import Foundation; 
#endif 

Dans mon cas, et probablement dans le vôtre aussi, ils sont désactivés. Si vous ne pouvez pas ou ne pouvez pas les activer, vous pouvez simplement vous assurer d'inclure l'en-tête de connectivité vous-même à chaque fois, par ex.

#import <WatchConnectivity/WatchConnectivity.h> 
#import "MyApp-Swift.h" 

Voir https://stackoverflow.com/a/24064015/67824