2017-02-23 9 views
0

私はSwiftを初めてご利用になり、質問があります。私はタスクを実行するコードのために次のブロックを持っています。ただし、このタスクブロックは、Xcode 8.2.1から実行すると実行されません。何が間違っているのですか?Swift 3.0:タスクブロックが実行されません

// Execute HTTP Request 
let task = URLSession.shared.dataTask(with: request as URLRequest) { 
(data, response, error) in 

// Check for error 
if error != nil 
{ 
print("error=\(error)") 
return 
} 
// Print out response string 
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 
print("responseString = \(responseString)") 


// Convert server json response to NSDictionary 
do { 
if let convertedJsonIntoDict = try JSONSerialization.jsonObject(with: data!, options: []) as? NSDictionary { 

// Print out dictionary 
print(convertedJsonIntoDict) 

// Get value by key 
let sessionId = convertedJsonIntoDict["sessionId"] as? String 
print(sessionId!) 

} 
} catch let error as NSError { 
print(error.localizedDescription) 
} 

} 
task.resume() 

completionHandlerは必須ですか?私はmain.swiftファイルの中でこれを実行しています。

+1

タスクが終了する前にプログラムが終了している可能性があります。コードのコンテキストをさらに提供する。 –

+0

あなたの質問とはまったく無関係で、 'NSString'、' NSURLRequest'、 'NSError'参照を省くとコードが単純化されます。代わりに 'String'、' URLRequest'と 'Error'を使います。そして、キャスティングは必要なく、 'encoding'は簡単です。 – Rob

+0

@Rob thats right、実行後にコンソールに印刷エラーや応答文字列が表示されません。 – gooner

答えて

0

タスクが終了する前にプログラムが終了しています。

私はそれを実行し、この出力を得た:

Hello, World! 
Program ended with exit code: 0 

私はその後、ちょうど停止からプログラムを維持するためにtask.resume()後にこれを追加しました:

while true {  
} 

そして、私はそれがURLにアクセスしようとしました見ることができました私は提供した。

関連する問題