2014-06-11 44 views
8

ho creato un oggetto Dictionary SwiftConvertire Swift dizionario per NSDictionary

var params = ["first_name": firstNameTextField.text, 
       "last_name": lastNameTextField.text, 
       "company": companyTextField.text, 
       "email_address": emailTextField.text, 
       "phone_number": phoneTextField.text] 

Avanti, ho objC quadro che ho collegato al mio app Swift. C'è un oggetto all'interno con la proprietà

@property (nonatomic, retain) NSMutableDictionary *fields; 

sto cercando di assegnare questo modo

object.fields = params 

e ottenuto un errore:

Cannot convert the expression's type '()' to type 'NSMutableDictionary!' 

Ho anche cercato di farlo in questo way

var params = ["first_name": firstNameTextField.text, 
       "last_name": lastNameTextField.text, 
       "company": companyTextField.text, 
       "email_address": emailTextField.text, 
       "phone_number": pnoneTextField.text].mutableCopy() as NSMutableDictionary 

object.fields = params 

Si compilato bene, ma ho avuto errore di runtime:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 
attempt to insert nil object from objects[0]' 

ho tutti i miei campi stampato e non sono nulle:

println(firstNameTextField.text) 
println(lastNameTextField.text) 
println(companyTextField.text) 
println(emailTextField.text) 
println(pnoneTextField.text) 

... 

1 
2 
3 
5 
4 

Tutte le idee?

+0

Ma "1", "2" e così via non sono testo che stai mantenendo in un campo di nome e un campo di cognome - sono ???? Mi sembra più probabile che siano tutti d'accordo. – matt

risposta

6

Prova parms.bridgeToObjectiveC(). Tuttavia, potrebbe darti un NSDictionary piuttosto che un NSMutableDictionary.

+1

Grazie, funziona così! var params = [...]. bridgeToObjectiveC() come NSMutableDictionary –

+0

Prego! – Bill

+2

Questo non sembra funzionare fin dalla beta 6? lasciare asdf = [ "asdf": "qwer"] bridgeToObjectiveC() 'Dizionario ' non ha un membro nominato 'bridgeToObjectiveC' –

4

Sto indovinando che questo codice di inizializzazione tua params ...

var params = ["first_name": firstNameTextField.text, 
       "last_name": lastNameTextField.text, 
       "company": companyTextField.text, 
       "email_address": emailTextField.text, 
       "phone_number": phoneTextField.text] 

... potrebbe accadere prima di avere tutte le prese dei campi di testo agganciati. Quello che vorrei suggerire è impostare questo var come @lazy, digitarlo come Dictionary<String,String> e impostarlo su una chiusura chiamata che restituisce questo dizionario. Pertanto, il dizionario non verrà creato fino a un momento successivo, quando si accede effettivamente a self.params.

+0

+1 Dopo alcuni test sono arrivato allo stesso risultato. – Sulthan

+0

No, come si può vedere la funzione println stampa valori corretti. Quindi posso dire che tutti i campi di testo sono stati inizializzati prima di –

Problemi correlati