2014-11-21 92 views
1

我想在Swift中创建货币转换器。我看到这个帖子:Need API for currency convertingHow to make an HTTP request in Swift?在Swift中创建货币转换器

所以,当我一起将它们结合在一起:

let url = NSURL(string: "http://download.finance.yahoo.com/d/quotes.csv?s=USDEUR=X&f=nl1d1t1"); 

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
    println(NSString(data: data, encoding: NSUTF8StringEncoding)) 
} 

task.resume() 

它返回我输出这样的:

Optional("USD to EUR",0.7987,"11/20/2014","3:45am") 

但我要访问的汇率。我怎么做?我不知道该怎么做?

回答

2
if let string = NSString(data: data, encoding: NSUTF8StringEncoding) { 
    let exchangeRate = string.componentsSeparatedByString(",")[1].doubleValue 
} 
1

返回的数据是其中的值由逗号分隔的字符串,因此这将是我的做法:

var dataString = NSString(data: data, encoding: NSUTF8StringEncoding) 
let values = dataString.componentsSeparatedByString(",") 

let exchangeRate = values[1].doubleValue 
0

斯威夫特3版本: 我有麻烦接受的答案在Swift 3中编译。下面是我能够在swift 3中工作的内容:

guard let url = URL(string: "https://download.finance.yahoo.com/d/quotes.csv?s=USDEUR=X&f=nl1d1t1") else { 
     print("Error: cannot create translation URL") 
     return 
    } 

    let loadRequest = URLRequest(url:url) 

    URLSession.shared.dataTask(with: loadRequest, completionHandler: { (data, response, error) in 
     if let error = error { 
      #if DEBUG 
       print("Error: data task error for translation \(error)") 
      #endif 
      return 
     } 

     guard let data = data else { 
      #if DEBUG 
       print("Error: data null for translation") 
      #endif 
      return 
     } 
     if let translationString = String(data: data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue)) { 
      #if DEBUG 
       print(translationString) 
      #endif 

      let exchangeRateArray = translationString.components(separatedBy: ",") 
      let exchangeRate: Double = Double(exchangeRateArray[1])! 
      print(exchangeRate) 
     } 
     else { 
      #if DEBUG 
       print("Error generating string from data in translation") 
      #endif 
      return 
     } 

    }).resume()