我正在尝试使用进行同步请求Alamofire
。我查看了Stackoverflow并发现了这个问题:使异步alamofire请求成为sync
我看到接受的答案用于completion
使Alamofire
请求同步,但是我无法使其正常工作。这是我的简化代码:
func loadData(completion: (Bool)) -> (Int, [String], [String], [String]){
Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { response in
switch(response.result) {
case .success(_):
if let JSON = response.result.value as! [[String : AnyObject]]!{
//Here I retrieve the data
}
completion(true)
break
case .failure(_):
print("Error")
completion(false)
break
}
}
return (numberRows, nameArray, ageArray, birthdayArray)
}
有了这段代码,我在尝试制作时会出错completion(bool value)
。我收到的错误如下:
无法调用非功能类型“布尔”的值
我尝试使用许多使用完成的示例来同步获取值(因为我需要先检索数据才能将其显示在表上,并同时获取该表的行数),但没有成功。
如何使用该完成来获取同步响应?
提前致谢!
当您使用完成处理程序时,请勿使用return。
func loadData(completion: @escaping (_ number: Int, _ strArr1: [String], _ strArr2: [String], _ strArr3: [String]) -> ()){
Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { response in
switch(response.result) {
case .success(_):
if let JSON = response.result.value as! [[String : AnyObject]]!{
//Here I retrieve the data
}
completion(number: numberRows, strArr1 : nameArray, strArr2 : ageArray, strArr3: birthdayArray)
break
case .failure(_):
print("Error")
completion(number: numberRows, strArr1 : nameArray, strArr2 : ageArray, strArr3: birthdayArray)
break
}
}
}
loadData (completion: { (number, strArr1, strArr2, strArr3) in
// do it
// for exapmple
self.number = number
self.strArr1 = strArr1
// and so on
})
或者,如果要在闭包中返回任何值,则必须使用完成处理程序来返回任何值或类似的东西,例如,如果要返回布尔值:
func loadData(completion:(number: numberRows, strArr1 : nameArray, strArr2 : ageArray, strArr3: birthdayArray) -> (Bool))
并在 loadData
loadData( completion: { ( number, strArr1, strArr2, strArr3 ) -> (Bool) in
# code
return False
})
或其他想法。
我使用的是swift3。但是,如果您要使用其他版本的swift,请注意外部参数名称和内部参数名称,例如: @escaping (_ number:Int, _ strArr1: [String], _ strArr2: [String], _ strArr3: [String]) -> ())
如果要设置外部参数名称,只需删除_
并设置参数名称即可。
我在做C#项目。我想通过websocketsharp库以某种同步的方式发送API请求。 我一直试着按照以下方式去做: > 在发送任何WS请求之前,我们使用唯一的ID创建新的SynchronousRequest()对象,并将新创建的对象添加到某种类型的等待列表中 我们在响应中发送WS请求,向有效负载添加唯一的ID-服务器将返回相同的ID。 我们开始等待事件发出信号(一旦我们收到响应就会发出信号) 在
我使用的服务器在HTTP状态消息中返回错误消息。例如,它将返回“400个用户已经存在”,而不是“400个错误请求”。 我想访问Alamofire调用的响应方法中的字符串“用户已经存在”。但是,我找不到任何方法来访问这个字符串。 我已经在StackOverflow上发现了这个问题:Swift Alamofire:如何获取HTTP响应状态代码 不幸的是,没有人回答这个问题。:( 以下是Chrome显示
Spring留档声明,即使要执行同步超文本传输协议调用,我们也必须从RestTemboard切换到。 目前,我有以下代码: 当然,我可以在这里使用CountdownLatch,但它看起来像是API滥用。 如何执行同步请求?
问题内容: 如何使Ajax请求同步? 我有一个需要提交的表格。但是只有在用户输入正确的密码时才需要提交。 这是表单代码: 用于发送和检查密码的jQuery代码是这样的: 但是,无论ajax请求返回的值如何,该表单始终提交。我检查了其他所有内容。输入正确的密码后,arr的值将显示为“成功”,反之亦然。 如何使此请求同步?据我可以调试,请求是异步的,因此在请求完成之前先提交表单。 checkpass.
问题内容: 我读了一些将jsons发布到服务器的示例。 有人说: OkHttp是Java提供的HttpUrlConnection接口的实现。它提供用于编写内容的输入流,并且不知道(或不在乎)内容的格式。 现在,我想用名称和密码的参数对URL进行常规发布。 这意味着我需要自己将名称和值对编码为流? 问题答案: 当前接受的答案已过期。现在,如果您想创建一个发布请求并向其中添加参数,则应该使用Mul
问题内容: 我有一个简单的放置请求,并且正在使用Alamofire的类型将数据发送到服务器。我想使用codable。如何将我的可编码结构转换为参数,或者重新配置Alamofire请求以将JSON对象作为参数?使用Alamofire发送帖子和放置请求的最佳,最有效的方法是什么? 这就是我现在正在使用Alamofire所做的事情。 这是我们的结构。 问题答案: 您可以制作一个新的并设置为您的编码。试试