我正在学习swift,我现在正试图理解一个错误。我正在尝试从php脚本获取一个xml文件,这要归功于查询,我正在使用完成处理程序将这些查询的结果作为回调。
问题是我对这些技术并不满意,并且说缺少论据。
以下是使用完成处理程序的函数:
func connect(completion: (String) -> ())
{
let password : String = "psw"
let login : String = "log"
let postString : String = "login=\(login)&password=\(password)"
let urlString = "http://www.mydomain.fr/script.php"
var output : String = ""
let request = NSMutableURLRequest(url: NSURL(string: urlString)! as URL)
request.httpMethod = "POST"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request as URLRequest){
data, response, error in
if error != nil {
print("error=\(error)")
return
}
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("responseString = \(responseString)")
output = responseString as! String
}
task.resume()
completion(output)
}
这是我称之为函数的代码片段:
func misctest()
{
let dbc : dataBaseCloner = dataBaseCloner()
let output: String
connect(completion : { (output) in
print(output)
})
}
这段代码显示有关连接调用的错误:
>>>Missing argument for parameter #2 in call
我做错了什么?为什么需要两个参数?
非常感谢你的帮助。
Elbattore
答案 0 :(得分:1)
我已复制粘贴您的代码,并且它正常工作,没有任何错误。尝试关闭和打开Xcode。
此外,您必须将completion(output)
移至任务完成状态,因为它是异步的,如果没有,您的输出将始终为空:
(...)
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("responseString = \(responseString)")
output = responseString as! String
completion(output)
}
task.resume()
(...)
答案 1 :(得分:0)
func misctest()
{
let dbc : dataBaseCloner = dataBaseCloner()
let output: String
connect({ (output) in
print(output)
}, <#UnsafePointer<sockaddr>!#>, <#socklen_t#>)
print("working!")
}
然后它不起作用并且说:
cannot convert value of type '(Any)->()' to expected argument type'int32'
这太奇怪了。