将从Swift中的HTTP请求返回的NSData转换为String

时间:2015-02-02 01:02:04

标签: xcode string swift nsstring nsdata

我有一些代码发出HTTP请求,然后使用数据,响应和错误结果调用函数。然后,此函数尝试调用函数handler,该函数将Swift String作为其唯一参数。我试图将从HTTP请求返回的NSData对象(data)转换为NSString,然后从那里转换为Swift String,但XCode给出错误说'(字符串) - > $ T2'当我尝试在handlerString)上调用我的函数(res)时,与'字符串' 不同。

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

有关如何解决此错误的任何想法?

2 个答案:

答案 0 :(得分:1)

你关闭的语法是错误的。
尝试将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

答案 1 :(得分:0)

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常量定义为String类型。然后尝试使用类型系统不喜欢的NSString对象初始化它。