2017-01-10 9 views
-1

我variavle d后未分配将返回nil变量,因为你想<code>print(d)</code>外完成块的网络呼叫

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) 

d将返回零

+1

请看看在Alamofire README其中明确规定,所有的请求都处理*异步* –

回答

1

,该声明将之前执行您的网络请求已完成。尝试把该完成块内:

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) 
}) 
+0

我想在函数返回'D' –

+0

见@马丁的r评论。我建议你阅读异步编程 – toddg

相关问题