看下面的代码:
public override func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
if let urlError = error as? URLError {
switch urlError.code {
case .cancelled:
print("cancelled")
case .badURL:
print("badURL")
default:
break
}
}
}
第一个问题:
URLError
没有属性code
。它只有一个公共结构Code
。
那么为什么可以使用urlError.code
。
第二个问题:
URLError.Code
是一个结构。它具有许多静态属性,代码如下:
这不是枚举。那么为什么要使用语法case .cancelled:
。
答案 0 :(得分:1)
那为什么可以使用urlError.code
根据to documentation Error
符合类型NSError
,并且NSError
具有属性code
,因此可以使用code
这不是枚举
urlError.code
的类型为URLError.Code
,并且此类型符合协议RawRepresentable
(您可以了解其here),因此可以使用switch-case
枚举