Il seguente codice lanci un messaggio che dice 'Initializer per condizionale vincolante deve avere tipo opzionale, non e 'ANYOBJECT''Initializer per condizionale vincolante deve avere tipo opzionale, non e 'ANYOBJECT - Approccio
func parseData2(){
var data:NSData?
if let data2 = data {
do {
let details = try NSJSONSerialization.JSONObjectWithData(data2, options: .AllowFragments)
if let actualDetails = details where actualDetails.isKindOfClass(NSDictionary) {
print("Parse Data")
}
}catch {
print("Error \(error)")
}
}
}
Per risolvere il sopra l'errore ho usato il seguente codice.
func parseData2(){
var data:NSData?
if let data2 = data {
do {
let details:AnyObject = try NSJSONSerialization.JSONObjectWithData(data2, options: .AllowFragments)
if let actualDetails:AnyObject = details where actualDetails.isKindOfClass(NSDictionary) {
print("Parse Data")
}
}catch {
print("Error \(error)")
}
}
}
C'è un approccio migliore di quanto sopra o il mio codice potrebbe bloccarsi?
C'è un codice più che voglio aggiungere considerando nil controllare, tipo di controllo e quinditipo di controllo getto. Il motivo per cui Swift offre una grande flessibilità ma un po 'difficile da risolvere. Diciamo che ho un dizionario, cityDetails e sto cercando di ottenere dati per self.cityZipCode e self.cityIdentifier, che sono facoltativi, definiti come var cityZipCode: Int? e var cityIdentifier: Int?
if let cityBasic = cityDetails["basicDetails"] where
cityBasic!.isKindOfClass(NSDictionary) {
self.cityZipCode = (cityBasic as! NSDictionary)["zip"].integerValue ?? 0
self.cityIdentifier = (cityBasic as! NSDictionary)["cityId"].integerValue ?? 0
}
Non capisco cosa stai chiedendo nell'aggiornamento della tua domanda? O chiarire come si riferisce alla prima parte o porre una nuova domanda per la nuova parte. Al momento il tuo titolo si riferisce ad un problema di 'Optional Binding', la tua prima parte riguarda' do try catch' e ora si tratta di 'down casting 'e' nil coalescing operator' –
Sono un po' confuso con il controllo nullo, controllo del tipo e poi downcasting, come funzionano tutte queste cose insieme? Un codice semplice ma richiede molta comprensione. – andyPaul
[is and as] (http://www.codingexplorer.com/type-casting-swift/), [collegamento facoltativo] (http://www.codingexplorer.com/multiple-optional-bindings-swift-1- 2 /), [prova a catturare] (https://www.hackingwithswift.com/new-syntax-swift-2-error-handling-try-catch). Google è tuo amico per domande di lingua generale. Soprattutto quando riguarda il più scritto su roba –