В этом случае компилятор C # не будет выбирать какой-либо конструктор и вместо этого будет ошибкой. Значение null
является законным для нескольких доступных конструкторов, и для выбора одного из них недостаточно логики разлома, поэтому он вызывает ошибку.
Логика разрешения перегрузки компилятора C # представляет собой сложный процесс, но короткий (и по сути неполный) обзор того, как он работает, выглядит следующим образом
. Полные данные перечислены в разделе 7.4 спецификации языка C #. И я уверен, что Эрик скоро отправится, чтобы дать гораздо более точное описание :)
Это код, который я использую для «выхода» из приложения, использующего ADAL.
Он вызывает конечную точку выхода из системы для аннулирования токена обновления на стороне сервера и удаляет все соответствующие файлы cookie и записи цепочки для ключей.
fileprivate var safariModal = false
fileprivate var safariHostVC: UIViewController?
public func logout(presentOn viewController: UIViewController?, modal: Bool) {
let client = "xyzzy" // Your app client id here
let redirect = "youruri://somepath/" // Your redirect URI here
ADKeychainTokenCache.defaultKeychain().removeAll(forClientId: clientid, error: nil)
if let url = URL(string:"https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=\(redirect)") {
let safari = SFSafariViewController(url: url)
safari.toolbarItems = nil
safari.delegate = self
if #available(iOS 11.0, *) {
safari.dismissButtonStyle = .close
}
guard let vc = viewController else {
return
}
self.safariHostVC = vc
self.safariModal = modal
safari.modalPresentationStyle = .overFullScreen
safari.modalTransitionStyle = .coverVertical
if modal {
vc.present(safari, animated: true, completion: nil)
} else {
vc.navigationController?.pushViewController(safari, animated: true)
}
let cookieJar = HTTPCookieStorage.shared
guard let cookies = cookieJar.cookies else { return }
let cookiesArr = Array(cookies)
for cookie: HTTPCookie in cookiesArr {
if (cookie.name == "SignInStateCookie" || cookie.name == "ESTSAUTHPERSISTENT" || cookie.name == "ESTSAUTHLIGHT" || cookie.name == "ESTSAUTH" || cookie.name == "ESTSSC") {
cookieJar.deleteCookie(cookie)
}
}
}
}
Вам также необходимо реализовать функцию SFSafariViewControllerDelegate
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
guard let vc = self.safariHostVC else {
return
}
if self.safariModal {
vc.dismiss(animated: true, completion: nil)
} else {
vc.navigationController?.popViewController(animated: true)
}
self.safariHostVC = nil
}