나는 다음과 같은 코드를 가지고 :이 함수를 호출 할이 "통화를 사용할 수 없습니다"출력한다)하지만 다른 시간 통화 작품과는 변환 할 때 때때로왜 실패 내 API 호출입니다
func convert(currencyToConvert:String,amount:Double,currencyToConvertTo:String,date:String)->Double{
makeConnection(date: date)
usleep(80000)
if let x = currencyRates[currencyToConvert]{
var a = 0.00
if currencyToConvert == "USD"{
a = amount*currencyRates["SGD"]!
}
else {
a = (amount*currencyRates[currencyToConvertTo]!)/x
}
return a
}
else {
print("currency not available")
return 0.00
}
}
func makeConnection(date:String){
currencyRates.removeAll()
let url = URL(string: "https://openexchangerates.org/api/historical/\(date).json?app_id=xyz")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil
{
print ("ERROR")
// ADD SEVERAL URL'S HERE FOR ACCESS HERE
}
else
{
if let content = data
{
do
{
let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
if let rates = myJson["rates"] as? NSDictionary
{
for (key, value) in rates
{
self.currencyRates[(key as? String)!] = value as? Double
}
}
}
catch
{
}
}
}
}
task.resume()
}
을 통화. 전화가 끊어지지 않도록하려면 어떻게해야합니까? 통화가 이루어지기 전에 통화에 충분한 시간을 가져야한다는 지연을 추가했습니다.
편집 1 :
좋아, 그래서 잠을 제거하고 실제로 충돌이 앱을 일으키는 동안 루프하지만 실행하기 전에
currency not available
거의 200 ~ 300 번 인쇄됩니다 명령문을 추가 아이폰에. 다른 방법을 사용하여 비슷한 결과를 얻으려면 어떻게해야합니까?
func convert(currencyToConvert:String,amount:Double,currencyToConvertTo:String,date:String)->Double{
makeConnection(date: date)
var currencyFetched:Bool = false
var a:Double = 0.0
repeat {
if let x = currencyRates[currencyToConvert]{
if currencyToConvert == "USD"{
a = amount*currencyRates["SGD"]!
}
else {
a = (amount*currencyRates[currencyToConvertTo]!)/x
}
currencyFetched = true
print("currency available")
return a
}
else {
print("currency not available")
currencyFetched = false
}
}while currencyFetched == false
}
이'makeConnection' 함수에 콜백/완료 블록을 추가하고 그것을 사용 ... – jcaron
당신은 나에게 줄 수 문법이 어떻게 작동하는지에 대한 대략적인 아이디어. –