2017-02-23 56 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() 

Требуется ли завершение ремонта? Я запускаю это внутри файла main.swift.

+1

Кажется, что ваша программа заканчивается до завершения задачи. Предоставьте больше контекста для кода. –

+0

Как и в сторону, и полностью не связанный с вашим вопросом, ваш код будет упрощен, если вы будете акцинировать ссылки «NSString», «NSURLRequest» и «NSError». Вместо этого используйте 'String',' URLRequest' и 'Error'. Тогда никакое кастинг не требуется, а «кодирование» проще. – Rob

+0

@Rob thats right, я не вижу ни одной ошибки печати или ответа String в консоли после запуска. – gooner

ответ

0

Ваша программа заканчивается перед завершением задачи.

Я запустил его и получил этот результат:

Hello, World! 
Program ended with exit code: 0 

Затем я добавил это после того, как task.resume() просто держать программу от остановки:

while true {  
} 

И я мог видеть его попытки получить доступ к URL Я предусмотрел.