代码之家  ›  专栏  ›  技术社区  ›  baryon5

将Swift中HTTP请求返回的NSData转换为字符串

  •  0
  • baryon5  · 技术社区  · 11 年前

    我有一些代码可以发出HTTP请求,然后使用数据、响应和错误结果调用函数。然后,该函数尝试调用一个函数, handler ,这需要斯威夫特 String 作为唯一的论据。我已尝试转换 NSData 对象( data )从HTTP请求返回到 NSString ,然后从那里到斯威夫特 一串 ,但XCode给出了一个错误消息 '(字符串)->$T2”与“字符串”不相同 当我尝试调用函数时( 处理器 )在那上面 一串 ( res ).

        let res: String = NSString(data: data, encoding: NSUTF8StringEncoding)!
        handler(res)
    

    关于如何修复此错误,有什么想法吗?

    2 回复  |  直到 11 年前
        1
  •  1
  •   rakeshbs    11 年前

    闭包的语法错误。
    尝试更改 handler: (String) handler: (String) -> ()

    func do_request(url: String, data: String?, handler: (String) -> ()) {
        // Your code
        if let res: String = NSString(data: data, encoding: NSUTF8StringEncoding)
        {
             handler(res)
        } 
    }
    

    阅读以下内容了解更多信息: https://www.codefellows.org/blog/writing-completion-blocks-with-closures-in-swift

        2
  •  0
  •   rastersize    11 年前

    NSString 可以被类型转换为Swift String ,它甚至自动为您完成。因此,在您的情况下,以下内容就足够了:

    if let res = NSString(data: data, encoding: NSUTF8StringEncoding) {
        handler(res)
    } else {
        // handle that the data wasn’t convertible to a string.
    }
    

    (我添加了 if let 部分原因是强制取消期权通常是个坏主意。)


    然而,你得到错误的原因是因为你定义了 res 常量的类型 一串 。然后尝试使用 NSString字符串 类型系统不喜欢的对象。