2014-06-03 14 views
7

Ho problemi ad accedere alla mia estensione rapida dall'obiettivo-c.Accesso a Swift Extension da Objective-C

Ho il seguente codice in un file .swift:

extension NSDictionary { 
    func dictionaryAsJsonString() -> NSString { 
     var err: NSError? 
     var data = NSJSONSerialization.dataWithJSONObject(self, options: NSJSONWritingOptions.PrettyPrinted, error: &err) 
     var string = NSString(data: data, encoding: NSUTF8StringEncoding) 
     return string 
    } 
} 

mi aspetto di essere in grado di effettuare le seguenti operazioni nel mio file .m:

[dictionary dictionaryAsJsonString]; 

ma può' t trovare il mio metodo e non si completa automaticamente.

So che le mie importazioni funzionano correttamente perché sono in grado di accedere ai miei altri oggetti rapidi.

+0

Hai capire come chiamare le estensioni da Objective-C – user2924482

risposta

0

E 'abbastanza facile utilizzando semplicemente un dizionario

20> extension Dictionary { 
21.  func toJSONString() -> String { return "my dictionary" } 
22. } 
23> ["a": 1, "b": 2].toJSONString() 
$R10: String = "my dictionary" 

La documentazione di Apple non menziona utilizzando le estensioni sulle classi Objective-C.

+3

Nella documentazione, che parlare di come le estensioni sono analoghi a categorie (che è qualcosa che puoi fare in questo modo). Anche se non l'ho ancora provato, suppongo che se avessi una categoria su una classe obj-c esistente, sarò in grado di accedere a quei metodi tramite swift. Ma secondo quello che hai detto, non funziona nell'altro modo? – Olshansk

1

Questo era probabilmente un bug o un'implementazione incompleta, nella versione iniziale che si è provato a giugno. Funziona bene per estendere NSDictionary nell'ultima beta. Ad esempio, questo molto di estensione e di utilizzo opere complesse come previsto, con il completamento del codice:

extension NSDictionary { 
    func myFooBar() { 
     println("gaaah") 
    } 
} 

// elsewhere... 

var d = NSDictionary(object: "bar", forKey: "foo") 
d.myFooBar() 
+0

come da XCode versione 7.1.1 (7B1005) La parte altrove nell'obiettivo c non sembra funzionare. – Intentss