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

Converting the NSData returned from an HTTP request in Swift to a String

我有一些代码可以发出 HTTP 请求,然后使用数据、响应和错误结果调用一个函数。然后此函数尝试调用函数 handler,该函数将 Swift String 作为其唯一参数。我试图将从 HTTP 请求返回的 NSData 对象 (data) 转换为 NSString,然后从那里转换为 Swift String,但是XCode 当我尝试调用我的函数 (handler ) String (res).

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

关于如何修复此错误的任何想法?

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 对象来初始化它。

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