swift 3 urlRequest session.dataTask没有触发

时间:2016-11-26 16:28:59

标签: swift3 nsurlrequest urlrequest

我正在尝试使用Swift 3从雅虎获得股票报价。尽管Swift 2上有一些不错的教程,但它们似乎都没有很好地转换为Swift 3。

我目前遇到的问题是,在下面的代码中,永远不会调用session.dataTask。 print语句永远不会触发,其中的其余代码也不起作用。

我已检查过请求变量是否正常,并且该网址已在yahoo开发者网站上进行了测试。

所以我认为我必须让dataTask的语法错误或有错误所以完全跳过。

有什么想法吗?

    urlString = "http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where symbol IN ('APL')"

        //let urlNSS : NSString = urlString as NSString
        let urlStr : String = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
        let url : URL = URL(string: urlStr as String)!
        let request = URLRequest(url: url)
        let session = URLSession.shared
        let config = URLSessionConfiguration.default

        let task = session.dataTask(with: request, completionHandler: {(data, response, error) -> Void in

            print("in the task")

            ..
            ..
        )}

task.resume()

如果我检查任务,我会看到以下内容 enter image description here

1 个答案:

答案 0 :(得分:4)

您必须恢复已创建的任务(task.resume())。默认情况下,任务处于挂起状态。

我创建了一个Playground文件,其中包含不同的Yahoo RSS Feed网址。 https://drive.google.com/file/d/0B5nqEBSJjCriWl9UTWcxSE42Yk0/view?usp=sharing

您问题中的网址没有提供任何数据。

    <error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:lang="en-US">
<description>No definition found for Table yahoo.finance.quotes</description>
</error>

代码如下:

    //: Playground - noun: a place where people can play

import UIKit
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
var str = "Hello, playground"

let yahooURLString = "https://feeds.finance.yahoo.com/rss/2.0/headline?s=yhoo&region=US&lang=en-US"
let yahooRSSURL: URL = URL(string: yahooURLString)!

var request = URLRequest(url: yahooRSSURL)
request.httpMethod = "GET"

let sessionConfig = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfig)
let task = session.dataTask(with: request) {data, response, err in
    print("Entered the completionHandler")
    print("Response JSON:\n\(String(data: data!, encoding: String.Encoding.utf8)!)")
}
task.resume()

希望这有帮助。

编辑:附加出现在playgorund控制台中的print语句的屏幕截图。 enter image description here