2016-02-26 14 views
24

Sto tentando di convertire un esempio Objective-C in Swift 2, ma sto riscontrando un piccolo problema. L'originale Objective-C frammento:Il tipo contestuale 'AnyObject' non può essere utilizzato con il dizionario letterale?

NSMutableArray *inputsOutputs = [NSMutableArray array]; 
... 
[inputsOutputs addObject:@{@"input" : input, @"output" : trackOutput}]; 

e quello che ho pensato che il codice Swift dovrebbe essere:

var inputsOutputs = [Any?]() 
... 
inputsOutputs.append([ "input": input, "output": trackOutput ]) 

L'errore risultante è:

Contextual type 'AnyObject' cannot be used with dictionary literal? 

Come faccio a convertire l'Objective- C in questo caso a Swift?

originale Objective-C: https://developer.apple.com/library/mac/samplecode/avsubtitleswriterOSX/Listings/avsubtitleswriter_main_m.html

+0

Nel mio caso, la risposta è stata di aggiungere un cast al dizionario letterale essere assegnato a 'Any' ... Purtroppo, non posso venire con un semplice esempio in cui Questo è necessario :( –

risposta

31

Si può vedere che i contenuti della matrice sono dizionari con String chiavi e valori sconosciuti.

pertanto dichiarare la matrice più preciso

var inputsOutputs = [[String:AnyObject]]() 

In Swift 3 per i tipi di raccolta JSON o se il dizionario/matrice contiene solo tipi di valore utilizzano

var inputsOutputs = [[String:Any]]() 
+0

Grazie, ho pensato che fosse un array di oggetti di tipo JSON Non conoscendo ObjC, non aiuta –

4

Va bene, almeno in Swift 2+. Ho appena provato quanto segue in un parco giochi:

var objects = [Any?]() 
let dict = [ "one" : 1, "two" : 2 ] 
objects.append(dict) // prints [{["one": 1, "two": 2]}] 
objects.append([ "one" : 1, "two" : 2 ]) // prints [{["one": 1, "two": 2]}, {["one": 1, "two": 2]}] 
+0

Ho pensato che stavo usando Swift 2+, con XCode 7.2.1. Non so dove vorrei controllare per le impostazioni di conformità della versione di Swift? –

+0

Xcode 7 utilizza Swift 2, quindi hai risposto a questa domanda. È possibile che l'errore che hai visto si trovasse su una * diversa * linea? Questo è il tipo di errore che vedresti se provato a usare un indice su un oggetto 'AnyObject'. – NRitH

Problemi correlati