【发布时间】:2019-12-18 07:51:22
【问题描述】:
看下面的代码:
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:。
【问题讨论】:
-
您从哪里得知
switch只能与枚举一起使用?在Swift Programming Language book 中,“switch 语句考虑一个值并将其与几种可能的匹配模式进行比较。”。关于第一个问题,由于您没有包含 URLError 的完整定义,因此很难回答。并且不要发布代码图片,将其发布为文本 -
@JoakimDanielson URLError 是一个基础类。文档说它没有成员
code -
@JeremyP 问题并不清楚,但在这种情况下,
code在NSError中定义 -
我找不到
URLError和NSError之间的关系。那么成员code定义在哪里。@JoakimDanielson @JeremyP -
我从NSError.swift document知道了原因。
URLError符合协议_BridgedStoredNSError并且该协议有一个成员code.@JeremyP
标签: swift enums switch-statement