2016-02-13 95 views
0

我想在for循环中为数组quandlURLs运行下面的函数。我得到一行“loadDataFromURL”错误,说:不能将类型[String]的值转换为类型'Sting'的预期参数。有人可以告诉我我在这里错过了什么。谢谢!!FOR IN循环中的错误

class func getDataFromQuandlWithSuccess(success: ((Quandl: NSData!) -> Void)) { 
let quandlGold = "https://www.quandl.com/api/v3/datasets/LBMA/GOLD.json?auth_token=xyzDP7Cj-2F_Jss7sYHf&rows=1"   
quandlURLs = [quandlGold, quandlSilver,quandlPlatinum,quandlPalladium] 
    var index: Int 
    var urlData = [String]() 
    for index in quandlURLs { 
     loadDataFromURL(NSURL(string: quandlURLs[index])!, completion:{(data, error) -> Void in 
      //2 
      if let urlData[index] = data { 
       //3 
       success(Quandl: urlData[index]) 
       //below worked and showed raw data 
       //print("Successful \(urlData)") 

      } 
     }) 

    } 
} 

这里是loadDataFromURL功能

class func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) { 
let session = NSURLSession.sharedSession() 

// Use NSURLSession to get data from an NSURL 
let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 
    if let responseError = error { 
    completion(data: nil, error: responseError) 
    } else if let httpResponse = response as? NSHTTPURLResponse { 
    if httpResponse.statusCode != 200 { 
     let statusError = NSError(domain:"com.raywenderlich", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) 
     completion(data: nil, error: statusError) 
    } else { 
     completion(data: data, error: nil) 
    } 
    } 
}) 

loadDataTask.resume() 
} 
} 
+0

可以突出错误行吗? – Jacky

回答

0

所有你需要做的是改变for index in quandlURLsfor index in 0..<quandlURLs.count

也有与if let urlData[index] = data一个问题,因为你不能使用可选的绑定有一个数组,你需要定义一个新值,所以去if let urlDataEntry = data,在这种情况下,你的urlIndex数组应该是NSData类型。你也不需要var index: Int行。在使用创建Int数组的.. <函数上使用for in循环时推断Int,并且索引变量在整个for循环中都可用。

例如:

class func getDataFromQuandlWithSuccess(success: ((Quandl: NSData!) -> Void)) { 
    let quandlGold = "https://www.quandl.com/api/v3/datasets/LBMA/GOLD.json?auth_token=xyzDP7Cj-2F_Jss7sYHf&rows=1"   
    quandlURLs = [quandlGold, quandlSilver,quandlPlatinum,quandlPalladium] 
    var urlData = [NSData]() 
    for index in 0..<quandlURLs.count { 
     loadDataFromURL(NSURL(string: quandlURLs[index])!, completion:{(data, error) -> Void in 
      //2 
      if let urlDataEntry = data { 
       //3 
       urlData[index] = urlDataEntry 
       success(Quandl: urlDataEntry) 
       //below worked and showed raw data 
       //print("Successful \(urlData)") 

      } 
     }) 

    } 
} 
+0

感谢您的评论 - 不幸的是,错误仍然是一样的。我应该提到这个数组是由网页链接构成的,例如 let quandlGold =“https://www.quandl.com/api/v3/datasets/LBMA/GOLD.json?auth_token=xyzDP7Cj-2F_Jss7sYHf&rows=1” 我将此添加到上述评论中作进一步说明。 – kangarooChris

+0

你能包括全班吗? loadDataFromURL似乎是你的类中的另一个函数,我不能在没有它的情况下测试代码。 – James

+0

嗨,詹姆斯,我已经添加了上面的loadDataFromURL。谢谢你看这个!干杯 – kangarooChris