gpt4 book ai didi

ios - 为请求方法设置超时

转载 作者:搜寻专家 更新时间:2023-10-31 23:01:44 25 4
gpt4 key购买 nike

我正在尝试为检查用户名可用性的请求方法设置超时。当用户输入用户名并按下按钮时,将调用 checkUsername 方法。我的代码无法正常工作,因为 Timeout(5.0){} 中的代码从未执行过并且 timeout 从未获得值 false。我知道这不是最好的方法,但我想试一试,想知道是否可以通过某种方式对其进行修改,或者我是否需要其他方法?

var timeout: Bool = false

func usernameAvailable(username: String) -> String{
let response: String!
response = Server.checkUsername(username!)

Timeout(5.0){
self.timeout = true
}

while(!timeout){
if(response != nil){
return response
}
}
return "Timeout"
}

Timeout.swift 类看起来像这样并且正在运行

class Timeout: NSObject{

private var timer: NSTimer?
private var callback: (Void -> Void)?

init(_ delaySeconds: Double, _ callback: Void -> Void){
super.init()
self.callback = callback
self.timer = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(delaySeconds),
target: self, selector: "invoke", userInfo: nil, repeats: false)
}

func invoke(){
self.callback?()
// Discard callback and timer.
self.callback = nil
self.timer = nil
}

func cancel(){
self.timer?.invalidate()
self.timer = nil
}
}

最佳答案

我明白您正在尝试做什么,除非您真的需要/想要编写自己的网络代码,否则使用现有框架会更有意义。

我建议改为使用 NSURLRequest 中的 timeoutInterval 支持以及 NSURLSession 中的完成处理程序来实现您正在寻找的解决方案。

服务器响应的超时可以在诸如 NSURLSessionDataTask 之类的完成处理程序中处理。

这是一个可帮助您入门的工作示例,它从 iTunes Store 检索数据以说明如何处理您的超时:

let timeout = 5 as NSTimeInterval
let searchTerm = "philip+glass"
let url = NSURL(string: "https://itunes.apple.com/search?term=\(searchTerm)")
let request: NSURLRequest = NSURLRequest(URL: url!,
cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringCacheData,
timeoutInterval: timeout)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task: NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {
(data, response, error) in
if response == nil {
print("Timeout")
} else {
print(String(data: data!, encoding: NSUTF8StringEncoding))
}
}
)

task.resume()

如果您将超时间隔缩短到某个较短的时间,您可以强制发生超时。

关于ios - 为请求方法设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33191892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com