Swift 3 URL会话-根据URL添加超时

Swift 3 URL会话-根据URL添加超时,swift,nsurlconnection,nsurlsession,swift3,Swift,Nsurlconnection,Nsurlsession,Swift3,下面的代码工作得很好,但是如果数据连接太慢,我需要添加一个超时 func preload(){ let url = URL(string: "https://example.com/loadteams.php") let data = try? Data(contentsOf: url!) if data == nil{ showAlert() }else{ val

下面的代码工作得很好,但是如果数据连接太慢,我需要添加一个超时

  func preload(){

        let url = URL(string: "https://example.com/loadteams.php")
        let data = try? Data(contentsOf: url!)

        if data == nil{
                 showAlert()

            }else{
        values = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String : AnyObject]]

        }

       }
我假设我需要将URLSession引入其中,但我不确定如何做到这一点,我理解这应该是一个大致的过程

 let urlconfig = URLSessionConfiguration.default
        urlconfig.timeoutIntervalForRequest = 5
        urlconfig.timeoutIntervalForResource = 5
        self.session = URLSession(configuration: urlconfig, delegate: self.delegates, delegateQueue: nil)  

此错误没有代理

您可以调用
dataTask(with:)

不过,您可能已经注意到,与您的格式副本不同,这是异步的。因此,您可能应该应用一个完成处理程序模式,以便知道何时完成。因此,我会亲自从调用者那里更新UI,例如:

preload() { values in
    guard let values = values else {
        self.showAlert()
        return
    }

    self.values = values
    // trigger whatever UI update you want here
}

如何使用网络框架,比如Alamofire。它是一个健壮且可用的库,解决了所有的可能性和方法。在不同的网络环境中应用时,这可能会导致许多错误。如果我能提供帮助,我现在真的不想使用任何框架。adamprocter,请礼貌地提供完整的警告和有问题的行。@Rob啊,谢谢,很抱歉我忘了为Swift 3更改输入最新代码,因为我现在没有使用Nsarray。。。价值=尝试!JSONSerialization.jsonObject(带:data!,选项:JSONSerialization.ReadingOptions.mutableContainers)为![[String:AnyObject]]那么func-preload(completionHandler:@escaping(NSArray)->Void){be应该是什么呢?我不明白这个问题。func-preload(…){…}是函数的声明,所以你把它放在类的任何地方(例如,如果从您的
ViewController
类调用它,您的视图控制器中可能有该方法)。关于执行
preload(){…}
调用的位置,如答案末尾所示,您只需在从何处调用它(例如,可能从
viewDidLoad
或其他任何地方调用)@Rob谢谢你更新上面的代码,让我试试修改后再回复你。如果我把它弄糊涂了,我道歉。
preload() { values in
    guard let values = values else {
        self.showAlert()
        return
    }

    self.values = values
    // trigger whatever UI update you want here
}