2015-03-13 1 views
0

Я должен сделать http-вызов URL-адреса, и он вернет либо «Недействительный», либо «Действительный» в зависимости от того, что у меня есть в конце URL-адреса. Однако я не могу понять, как это сделать. Я очень новичок в http и не совсем уверен, как это работает. Но у меня так далеко:Как получить строку из http-запроса в swift

func httpcall(urlbit: String) { 
    var urlor = "http://notrealurl.com/etix.asp?t=scanticket&sid=100000&tid=" 
    urlor += urlbit 

    let url = NSURL(string: urlor) 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
     var feedback = (NSString(data: data, encoding: NSUTF8StringEncoding)) 
    } 

    task.resume() 

    if feedback == "invalid" { 
     return false 
    } else if feedback == "valid" { 
     return true 
    } 
} 

Очевидно, что это не работает. Ожидание обратной связи, чтобы вернуть что-либо, очевидно, смехотворно. Мне просто нужно выяснить, как получить доступ к тем данным, которые он получает от вызова url - точнее, хотя мне нужно получить строку, которую этот сервер должен отправить мне.

EDIT: Хорошо, поэтому я узнал немного больше о NSURL, и я думаю, что у меня есть нечто почти согласованное. Это все еще не работает, но я считаю, что приближаюсь. Вот мой код:

func httpcall2(urlbit: String, onResult: (Bool)-> Void) { 
    var urlor = "http://notreal.com/etix.asp?t=scanticket&sid=100000&tid=" 
    urlor += urlbit 

    let url = NSURL(string: urlor) 

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
     var feedback = (NSString(data: data, encoding: NSUTF8StringEncoding)) as String! 
     onResult(response=="Invalid") 
    } 

    task.resume() 
} 

И вот что я использую, чтобы вызвать функцию

httpcall2(mystr, { (responseWasInvalid: Bool) in 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
    if responseWasInvalid == true { 
     self.messageLabel.text = "valid" 
    } else if responseWasInvalid == false { 
     self.messageLabel.text = "invalid" 
    } 

    }) 
}) 

Он по-прежнему не кажется, на самом деле получить что-либо от вызова URL.

+0

Чтобы ввести текст в качестве кода, введите строку с 4 пробелами. Есть рекомендации для публикации, на которые вы можете захотеть взглянуть. – chrissukhram

ответ

0

Проведите проверку, если она есть, в закрытии. Ваш текущий код не имеет смысла, потому что вы проверяете реакцию прежде, чем ответ доступен

Update

Решение может быть что-то вроде этого:

func networkFunction(query: String, completion: (success: Bool) -> Void) { 
    var url = "http://notrealurl.com/etix.asp?t=scanticket&sid=100000&tid=" + query 

    let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!, completionHandler: { (responseData, response, error) -> Void in 
     if error == nil { 
      let feedback = NSString(data: responseData, encoding: NSUTF8StringEncoding) 

      completion(success: feedback == "valid") 
     } else { 
      println(error) 
      completion(success: false) 
     } 
    }) 
} 

networkFunction("what ever", { (success) -> Void in 
    println(success) 
    /* if you want to update the UI have to do it on the main thread: 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     view.backgroundColor = .redColor() 
    }) 
    */ 
}) 

Пожалуйста, прочитайте о замыканиях в целом чтобы получить представление о том, что это такое и как его использовать.

+0

в порядке, поэтому я отредактировал немного больше. http://pastebin.com/43PPsiKG, но теперь он говорит: «использование неразрешенного идентификатора,« returnstate ». Как исправить эту проблему? – spudzee111

+0

в порядке, поэтому моя функция объявляет переменную returnstate и возвращает ее до того, как http-вызов может получить возможность ее редактировать. У вас есть идеи по устранению этого? – spudzee111

+0

Я обновил ответ. посмотрите – HorseT

 Смежные вопросы

  • Нет связанных вопросов^_^