0

Comment puis-je accéder à l'instance partagée de "SharedManager" déclarée dans mon fichier Swift à partir de ma classe Objective-C?Comment allouer un objet statique défini dans une classe Swift à l'intérieur d'une classe d'objectif-C?

Étapes:

J'ai déclaré un objet dans un fichier Swift comme suit:

Swift classe Déclaration:

De ce [instructions] [1] Je l'ai fait:

// Swift class 
class SharedManager{ 
    static let sharedInstance = SharedManager() 
} 

De la classe Objective-C:

En AppDelegate.m:

#import "ProjectName-Swift.h" 

@class SharedManager; 
@interface AppDelegate() 
@end 

@implementation AppDelegate 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

// How do I access to the shared instance of "SharedManager" ? 

}  

    [1]: http://stackoverflow.com/questions/24024549/using-a-dispatch-once-singleton-model-in-swift 

Répondre

0
class MyClass { 
    private static let _sharedInstance = MyClass() 

    class func sharedInstance() -> MyClass { return _sharedInstance } 
} 

Récupérer le singleton via

MyClass.sharedInstance() 
+0

Le fichier d'en-tête de pontage sert à exposer l'objectif C à Swift, le contraire de ce dont l'OP a besoin. OP doit utiliser le fichier d'en-tête généré automatiquement créé par Xcode, qu'ils ont déjà importé ('#import ProjectName-Swift.h'). – Alexander

+0

J'ai l'en-tête de pont pour exporter les classes Swift comme Alexander a dit – mm24

+0

classe MyClass { private static laisser _sharedInstance = MyClass() classe func sharedInstance() -> MyClass { retour _sharedInstance } } Récupérer le singleton via MyClass.sharedInstance() – Bassam

1

Pour utiliser une classe Swift en Objective C, il doit hériter d'une classe Objective C (par exemple comme NSObject), ou être marqué avec @objc.

Soit:

@objc class SharedManager { 
    static let sharedInstance = SharedManager() 
} 

Ou:

class SharedManager: NSObject { 
    static let sharedInstance = SharedManager() 
} 

Ensuite, vous pouvez l'utiliser comme tout autre objectif classe C:

SharedManager *manager = SharedManager.sharedInstance; 
+0

Malheureusement, cela ne fonctionne pas – mm24

+0

Qu'est-ce que cela signifie? Quel est le problème? – Alexander

+0

Il est dit que la propriété sharedinstance n'est pas trouvée – mm24

0

Vous devez effectuer les opérations suivantes:

  1. #import "ProjectName-Swift.h" dans le fichier d'implémentation Objective-C (.m) où vous voulez vous référer au type Swift.
  2. Sous votre SharedManager de NSObject:
class SharedManager: NSObject { 
    static let sharedInstance = SharedManager() 
} 

Cela fonctionne au moins avec Swift 2.3 et 3 (c.-à-Xcode 8 & versions actuelles SDK macOS/iOS, avec ou sans "Utiliser héritage Swift Version Langue" en configuration de construction). Je ne me souviens pas si avant Swift 2.3 vous pouvez faire le travail ci-dessus en marquant en plus la classe avec l'attribut @objc ou si les variables statiques déclarées dans Swift sont entièrement indisponibles au code Objective-C?