2017-10-04 1 views
0

Je suis en train de faire une boucle dans mon code comme ceci:Impossible jeter la valeur de type « NSTaggedPointerString » (0x10146ecd8) à « NSNumber » (0x102675600)

for row in rows! { 
     print("Row",row) 
     let pin = Pin.init(latitude: row[0] as! Float, longitude: row[1] as! Float, pinType: row[2] as! String, beaconID: row[3] as! Int, altitude: row[4] as! Float) 
     pinList.append(pin) 
    } 

Ici, la ligne est un Any et je crée l'objet pin en fonction des valeurs de la ligne.

Voici mon Pin Classe:

class Pin { 
    var latitude:Float 
    var longitude:Float 
    var pinType:String 
    var beaconID:Int 
    var altitude:Float 

    init(latitude:Float, longitude:Float, pinType:String, beaconID:Int, altitude:Float){ 
     self.latitude = latitude 
     self.longitude = longitude 
     self.pinType = pinType 
     self.beaconID = beaconID 
     self.altitude = altitude 
    } 
} 

Mais j'eu cette erreur:

Could not cast value of type ' NSTaggedPointerString ' (0x10146ecd8) to ' NSNumber ' (0x102675600).

alors que je suis en train de créer l'objet Pin.

Quelqu'un peut-il m'aider à résoudre ce problème? Merci.

+1

Veuillez montrer la sortie de 'print (" Row ", row)' – 3stud1ant3

+0

Voici la valeur de Row [1.283364, 103.815021, yellow, 1, 20]. J'ai trouvé le moyen de résoudre de façon inattendue :) merci pour votre temps. –

+3

Copie possible de [Impossible de convertir la valeur de type 'NSTaggedPointerString' en 'NSNumber'] (https://stackoverflow.com/questions/33299202/could-not-cast-value-of-type-nstaggedpointerstring-to-nsnumber) –

Répondre

0

De façon inattendue, j'ai trouvé la réponse en lisant les nombreuses documentations. Voici la solution à ce problème.

for row in rows! { 
     print("Row",row) 
     let lat = (row[0] as! NSString).floatValue 
     let lng = (row[1] as! NSString).floatValue 
     let pType = (row[2] as! NSString) as String 
     let bID = (row[3] as! NSString).integerValue 
     let alti = (row[4] as! NSString).floatValue 

     let pin = Pin.init(latitude: lat, longitude: lng, pinType: pType, beaconID: bID, altitude: alti) 
     pinList.append(pin) 
    } 

J'ai essayé de convertir toutes les valeurs de la ligne en NSString en premier et de convertir le résultat en types dans lesquels je convertis vraiment. :)

+0

Passer à 'NSString' (et même revenir à' String') est une très mauvaise solution. – vadian

0
id = Int((content[0]["id"] as! NSString).floatValue) 

Cela fonctionne très bien pour moi. Le contenu est json array