2016-11-26 4 views
2

を発射ない迅速、それらのどれもスウィフト3にも翻訳しているように見えるん3 URLRequestのsession.dataTask私はスウィフト2上のいくつかのまともなチュートリアルがありますがスウィフト3を使用してヤフーから株価を取得しようとしています

私が現時点で持っている問題は、以下のコードではsession.dataTaskが呼び出されないことです。 printステートメントは実行されず、そこにあるコードの残りの部分は機能しません。

リクエスト変数がうまく見え、urlがyahooデベロッパーサイトでテストされていることを確認しました。

だから、私はdataTaskの構文を間違っていなければならないと思っているか、またはエラーがあり、完全にスキップしています。

どのような考えですか?私は、次の enter image description here

+0

これはコマンドラインプログラムですか?次に、実行ループが必要です。http://stackoverflow.com/questions/25126471/cfrunloop-in-swift-command-line-program - または遊び場?次に、これは助けてください:http://stackoverflow.com/questions/24058336/how-do-i-run-asynchronous-callbacks-in-playground。 –

答えて

3

を参照してくださいタスクを検査した場合

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() 

あなたはタスク(task.resume())作成したを再開する必要があります。デフォルトでは、タスクはサスペンド状態です。

私は別のYahoo RSSフィードURLを持つプレイグラウンドファイルを作成しました。 https://drive.google.com/file/d/0B5nqEBSJjCriWl9UTWcxSE42Yk0/view?usp=sharing

あなたの質問にあるURLはデータを与えていません。

<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

+0

返事をありがとう。これをシミュレータで実行すると、エラーは発生しませんが、printステートメントのいずれも起動しません。だから私はどのように私は関数を呼び出している問題は、タスクは、コードの途中で、印刷ステートメントを許可していないか、またはシミュレータは、このタイプのコードが好きではない? –

+0

また、task.resume()の後にブレークポイントを置いてタスクを調べると、コンポーネントに値がありません –

+0

@MichaelMoulsdale遊び場ファイルをダウンロードして確認しましたか?私はデバッグコンソールに出力されたスクリーンショットを添付しました。また、印刷物のステートメントを明確にすることは、シミュレータだけでなく内部のタスクでも機能し、ブレークポイントも機能します。 –

関連する問題