【问题标题】:How to get a string from http request in swift如何快速从http请求中获取字符串
【发布时间】:2015-03-13 17:21:28
【问题描述】:

我应该对 url 进行 http 调用,它会根据我在 url 末尾的内容返回“无效”或“有效”。不过,我不知道该怎么做。我对 http 很陌生,并不完全确定它是如何工作的。但我已经做到了这一点:

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 获得的任何数据 - 更具体地说,我需要获取该服务器应该发送给我的字符串。

编辑:好的,所以我学到了更多关于 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 中真正收到任何东西。

【问题讨论】:

  • 要将文本作为代码输入,请将行缩进 4 个空格。您可能想查看一些发布指南。

标签: ios xcode swift nsurl


【解决方案1】:

将 if else 检查放在闭包内。您当前的代码没有意义,因为您在响应可用之前检查响应

更新

解决方案可能是这样的:

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()
    })
    */
})

请阅读有关闭包的一般信息,以了解它是什么以及如何使用它

【讨论】:

  • 好的,所以我编辑了更多。 pastebin.com/43PPsiKG 但现在它说“使用未解析的标识符,'returnstate'”。我该如何解决这个问题?
  • 好的,所以事实证明我的函数声明了变量 returnstate 并在 http 调用有机会编辑它之前返回它。您对如何解决此问题有任何想法吗?
  • 这对我有用,但我不知道如何将“prntln”的内容存储在字符串中! let url = NSURL(string: "cloud.com/motova-1/…) let request = NSURLRequest(URL: url!) NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { (response, data, error) in println(NSString(data :数据,编码:NSUTF8StringEncoding))}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多