我有一些代码发出HTTP请求,然后使用数据,响应和错误结果调用函数。然后,此函数尝试调用函数handler
,该函数将Swift String
作为其唯一参数。我试图将从HTTP请求返回的NSData
对象(data
)转换为NSString
,然后从那里转换为Swift String
,但XCode给出错误说'(字符串) - > $ T2'当我尝试在handler
(String
)上调用我的函数(res
)时,与'字符串' 不同。
let res: String = NSString(data: data, encoding: NSUTF8StringEncoding)!
handler(res)
有关如何解决此错误的任何想法?
答案 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
对象初始化它。