为什么struct可以使用'switch case'?

时间:2019-12-18 07:51:22

标签: swift enums switch-statement

看下面的代码:

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

enter image description here

那么为什么可以使用urlError.code

第二个问题: URLError.Code是一个结构。它具有许多静态属性,代码如下:

enter image description here

这不是枚举。那么为什么要使用语法case .cancelled:

1 个答案:

答案 0 :(得分:1)

  

那为什么可以使用urlError.code

根据to documentation Error符合类型NSError,并且NSError具有属性code,因此可以使用code

  

这不是枚举

urlError.code的类型为URLError.Code,并且此类型符合协议RawRepresentable(您可以了解其here),因此可以使用switch-case枚举