Hoe te converteren naar Int in Swift

Ik krijg een foutmelding bij het declareren ik

var users =  Array<Dictionary<String,Any>>()
users.append(["Name":"user1","Age":20])
var i:Int = Int(users[0]["Age"])

Hoe je de int-waarde?

InformationsquelleAutor ielyamani | 2014-06-06



5 Replies
  1. 24

    var i = users[0]["Age"] as Int

    Als GoZoner punten uit, als je niet weet dat de neerslachtig zal slagen, gebruik:

    var i = users[0]["Age"] as? Int

    Het resultaat zal worden nil als het niet lukt

    • soms is het resultaat nihil. Ik gebruikte deze methode voor het parseren van WKBridge
  2. 17

    Swift 4 antwoord :

    if let str = users[0]["Age"] as? String, let i = Int(str) {
      //do what you want with i
    }
    • Ik heb ondervonden van het probleem door het uitpakken van de inhoud die leek op verzoek Leverbaar(3). Ik probeerde te werpen als? Int dan zo? String – mislukte. Vervolgens geprobeerd om uit te pakken en gebruik het type dat de uitzondering heeft veroorzaakt, waaruit bleek dat Swift besloten om Int8 voor deze waarde. Zo folk, Int8 niet-naar Int, denken Swift ingenieurs. Uiteindelijk controleren van alle int-typen in de if/else flow.
  3. 9

    Als je zeker bent dat het resultaat is van een Int dan gebruik:

    var i = users[0]["Age"] as! Int

    maar als je twijfelt en wilt een nil waarde als het niet een Int dan gebruik:

    var i = users[0]["Age"] as? Int

    “Gebruik de optionele vorm van het type cast-operator (als?) wanneer u
    niet zeker of de neerslachtig zal slagen. Deze vorm van de operator
    altijd een optionele waarde, en de waarde nul als de
    bedroefd was niet mogelijk. Dit stelt u in staat om te controleren voor een succesvolle
    bedroefd.”

    Uittreksel Uit: Apple Inc. “De Swift programmeertaal.” iBooks.
    https://itun.es/us/jEUH0.l

    • Het is vermeldenswaard dat de aard van de i in het eerste voorbeeld is Int maar het type van i in het tweede voorbeeld zal worden Int?.
    • Rechts. Ik denk dat Apple zou denken van as Int en as Int? in plaats van de invoering van as?
    • Dat is een goed punt eigenlijk. Ik veronderstel dat as? is gelijk aan -isKindOfClass:, maar het verplaatsen van de ? zinvol zouden zijn.
  4. 0
    if let id = json["productID"] as? String {
       self.productID = Int32(id, radix: 10)!
    }

    Dit werkte voor mij. json["productID"] is van het type Any.
    Als het gegoten kan worden naar een string, en dan converteren naar een geheel Getal.

  5. -1

    Dit kan eerder hebt gewerkt, maar het is niet het antwoord voor Swift 3. Gewoon om te verduidelijken, ik heb niet het antwoord voor Swift 3, hieronder mijn testen met behulp van de bovenstaande antwoord, en het is duidelijk dat het niet werkt.

    Mijn gegevens zijn afkomstig uit een NSDictionary

    print("subvalue[multi] = \(subvalue["multi"]!)")
    print("as Int = \(subvalue["multi"]! as? Int)")
    if let multiString = subvalue["multi"] as? String {
      print("as String = \(multiString)")
      print("as Int = \(Int(multiString)!)")
    }

    De output die wordt gegenereerd:

    subvalue[multi] = 1
    as Int = nil

    Gewoon om te verduidelijken:

    a) De oorspronkelijke waarde is van het type Is? en de waarde is: 1

    b) het casten naar Int resulteert in nul

    c) Casting naar String resultaten in de nil (de afdrukken regels nooit)

    BEWERKEN

    Het antwoord is te gebruiken NSNumber

    laat num = subvalue[“multi”] zo? NSNumber

    Dan kunnen we het getal converteren naar een geheel getal

    laat myint = num.intValue

    • Misschien is het probleem dat je met behulp van NSDictionary in plaats van Dictionary? as? Int moeten werken in de boete Swift 3.
    • Eigenlijk, ja, dat is zeker het probleem. NSDictionary waarden zijn AnyObject, die niet kan werpen Int want het is niet een object-type. Gebruik een Swift woordenboek plaats en het zou moeten werken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *