2015-09-21 21 views
7

Xcode7 e veloce, il mio codice: il codiceNon può convertire il valore di tipo '[NSObject: ANYOBJECT]' al tipo di argomento previsto '[String: ANYOBJECT]'

func loadDefaults() { 
    let settingBundle = NSBundle.mainBundle().pathForResource("Settings", ofType: "bundle") 
    if settingBundle == nil { 
     return 
    } 

    let root = NSDictionary(contentsOfFile: settingBundle!.stringByAppendingString("Root.plist")) 

    let prefrences = root?.objectForKey("PreferenceSpecifiers") as! Array<NSDictionary> 

    let defautlsToRegister = NSMutableDictionary(capacity: root!.count) 

    for prefrence in prefrences { 
     let key = prefrence.objectForKey("Key") as! String! 
     if key != nil { 
      defautlsToRegister.setValue(prefrence.objectForKey("DefaultVale"), forKey: key!) 
     } 
    } 

    NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [NSObject: AnyObject]) 
} 

Problema:

NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [NSObject: AnyObject]) 

avvertenze costruzione

Impossibile convertire il valore di tipo '[NSObject: ANYOBJECT]' al tipo di argomento previsto '[String: ANYOBJECT]'

codice di cambiamento:

NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [String: AnyObject]) 

costruzione avvertimenti

'NSMutableDictionary' non è convertibile a '[String: ANYOBJECT]'

Si prega di insegnarmi come fare? Grazie.

+0

Si prega di mostrare esempio di ' defautlsToRegister 'come tipo –

+0

Usa l'aiuto di' as! ', come suggerito in http://stackoverflow.com/questions/24099165/how-do-i-convert-an-nsdictionary-to-a-swift-dictionarystring-nsobject? – Tali

risposta

5

tuo defautlsToRegister dovrebbe essere il seguente formato [String: AnyObject]

Esempio: Il seguente dovrebbe funzionare senza preavviso

let defautlsToRegister = ["Test":10] 
NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [String: AnyObject]) 
+0

Inchiodato. Grazie mille! –

+0

@HenryHeleine: siete i benvenuti :) –

0

Per me questo è lavorato.

let token = fields["X-AUTH-TOKEN"]! as? [[String : AnyObject]] //{ 
       // safe to use employees 
       self.bindings.setObject(NSString(format: "%@", token!) as String, forKey: "X-AUTH-TOKEN") 

Formato (metodo NSString) funzionerà in questo scenario.

+0

Puoi dirmi qual è il motivo del down voting votante? Per me il codice sopra ha funzionato. –

2

Ho notato una cosa semplice su questo errore. Non sono sicuro se questo è il caso, ma il lancio di String to NSString sembra risolvere il problema per me. Ho trovato una spiegazione che AnyObject è un alias di tipo per rappresentare istanze di qualsiasi tipo di riferimento, ad esempio: NSString. Ma String è un struct quindi non può essere il tipo di riferimento per AnyObject.

vedo due modi per questo:

Prime:

let keyForMyKey: NSString = NSString(string: "mykey") let result = dict.objectForKey(keyForMyKey) as? NSMutableArray

Second:

let result = dict.objectForKey(NSString(string: "myKey")) as? NSMUtableArray

più sul problema qui: http://drewag.me/posts/swift-s-weird-handling-of-basic-value-types-and-anyobject

Problemi correlati