重要事实
我忘了提到问题中的一个重要因素。我在 TestCase 中运行它。我认为这个问题与 TestCase 不等待异步完成处理程序返回有关
从迁移Alamofire
到SwiftHTTP
,因为我发现这更容易。
在 SwiftHHTP 上,无法知道生成了什么 URL,返回了什么错误。例如,我试图查看opt.debugDescription
变量,它返回了一些神秘的东西,比如描述字符串"<SwiftHTTP.HTTP: 0x60000007e540>"
我遵循的步骤
- 我已经设置
YES
为Allow Arbitrary Loads
. - 如果我粘贴
fullurl ->http://120.0.0.1:8080/myapi/Driver/getDriver?driver=2243&domain=4345&key=asdfasdf
. 即使catalina.out
在我的 mac 上运行的 tomcat 服务器上也会以调试消息响应。
但是当我在 Xcode 下的测试用例中运行它时,下面的代码不会打印任何调试打印。
- --1->、--2-->、--3-->,没有打印出来。
- 调试器断点也不止于此。
代码
var getData = [String:String]()
getData = ["domain": "4345",
"driver" : "2343",
"key" : "asdfasdf"]
var urlComponents = URLComponents(string: fullURL)!
var queryItems = [URLQueryItem]()
queryItems = self.getData.map{ URLQueryItem(name : $0.0, value : $0.1) }
urlComponents.queryItems = queryItems
print("fullurl ->"+(urlComponents.url)!.absoluteString)
do {
let opt = try HTTP.GET((urlComponents.url)!.absoluteString)
opt.start { response in
if let err = response.error {
print("--1-> error: \(err.localizedDescription)")
return //also notify app of failure as needed
}
print("--2--> opt finished: \(response.description)")
self.responseData = response
}
} catch let error {
print("--3--> got an error creating the request: \(error)")
}
编辑
即使将代码更改为https
or http://www.google.com
,结果也相同。
let testComponents = URLComponents(string: "https://www.google.com")!
URLSession.shared.dataTask(with: (testComponents.url)!, completionHandler: {
(data, response, error) in
if(error != nil){
print("..1>..")
}else{
do{
print ("..2>.." )
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String : AnyObject]
self.responseData = json
}catch let error as NSError{
print("..3>..")
}
}
}).resume()
编辑 1从这里 尝试@Vivek's answer。
callWebService(url: (urlComponents.url)!.absoluteString)
.
.
func callWebService(url : String) {
.
.
let callURL = URL.init(string: url)
什么都没有再次打印,错误/JSON,什么都没有。