Swift3:类型 'NSObject' 不符合协议'URLAuthenticationChallengeSender'



在Swift3 'NSURLAuthenticationChallengeSender'更改为'URLAuthenticationChallengeSender'所以在委托方法也从NSURlAuthentication更改为URLAuthentication(自动Xcode编辑)

我很困惑,我是否仍然缺少任何委托方法,但包括所有以下委托方法,它仍然显示如上错误。

如果有人面临同样的问题,请在这个帮助!!

Swift3

class GeneralFunctions: NSObject,NSURLConnectionDataDelegate,URLAuthenticationChallengeSender {
}

委托方法

func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: URLAuthenticationChallenge) {
}
func connection(connection: NSURLConnection, didReceiveResponse:URLResponse)
{
}
func connection(connection: NSURLConnection, didReceiveData data: NSData) {
}
func connection(connection: NSURLConnection, didFailWithError error: NSError) {
    print("Connection Failed")
}

func connection(connection: NSURLConnection, didReceiveAuthenticationChallenge challenge: URLAuthenticationChallenge) {
    //sanju swift3 160922-- re verify 
//        let myCredential = URLCredential(forTrust: challenge.protectionSpace.serverTrust!)
   //        challenge.sender!.useCredential(myCredential, forAuthenticationChallenge: challenge)
}
func connection(connection: NSURLConnection, canAuthenticateAgainstProtectionSpace protectionSpace: URLProtectionSpace) -> Bool {
    return true
}
func URLSession(session: URLSession, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: (URLSession.AuthChallengeDisposition, URLCredential) -> Void) {
    let protectionSpace = challenge.protectionSpace
    let theSender = challenge.sender
    if protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
        if let theTrust = protectionSpace.serverTrust{
            let theCredential = URLCredential(trust: theTrust)
            theSender?.use(theCredential, for: challenge)
            return
        }
    }
    theSender?.performDefaultHandling!(for: challenge)
    return
}

所以在Swift 3中,一些方法的签名略有变化。我也遇到过这个问题。对于所有需要的委托方法,只需输入方法的前几个字母然后按ctrl +空格,它就会自动完成方法的正确签名

最新更新