-1

My variavle d is returning nil

var d: Int!

Alamofire.request(mapsUrl).responseJSON(completionHandler: { (response) in
        let jsonObject = JSON(response.result.value)
        let value = jsonObject["rows"][0]["elements"][0]["distance"]["value"].int

        var converted = 0
        if value! <= 5000{
            converted = (value! / 1000) * 80
        }else{
            converted = (value! / 1000) * 65
        }
        if converted < 400{
            converted = 400
        }else if converted == 0{
            converted = 400
        }
        d = converted
    })
print(d)

But d is returning nil

ben fo
  • 21
  • 6
  • 1
    Please have a look at the Alamofire README which explicitly states that all requests are handled *asynchronously.* – Martin R Jan 10 '17 at 15:42

1 Answers1

1

Since you're trying to print(d) outside of the completion block, that statement will be executed before your network request is completed. Try putting that inside the completion block:

Alamofire.request(mapsUrl).responseJSON(completionHandler: { (response) in
    let jsonObject = JSON(response.result.value)
    let value = jsonObject["rows"][0]["elements"][0]["distance"]["value"].int

    var converted = 0
    if value! <= 5000{
        converted = (value! / 1000) * 80
    }else{
        converted = (value! / 1000) * 65
    }
    if converted < 400{
        converted = 400
    }else if converted == 0{
        converted = 400
    }
    d = converted
    print(d)
})
toddg
  • 2,863
  • 2
  • 18
  • 33