Swift 为什么struct可以使用';开关盒';?
查看以下代码:Swift 为什么struct可以使用';开关盒';?,swift,enums,switch-statement,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:
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
那么为什么可以使用urleror.code
第二个问题:
URLError.code
是一个结构。它有许多静态属性,代码如下:
它不是枚举。那么为什么可以使用语法case.cancelled:
那么为什么可以使用urleror.code呢
根据Error
符合类型NSError
和NSError
具有属性code
,这就是为什么可以使用code
它不是枚举
urleror.code
具有类型urleror.code
,并且该类型符合协议rawrrepresentable
(您可以阅读它),这就是为什么您可以使用switch case
作为enum的原因,您是从哪里想到switch
只能与enum一起使用的?从中可以看出,“switch语句考虑一个值,并将其与几个可能的匹配模式进行比较。”。关于第一个问题,很难回答,因为您没有包含URLError的完整定义。不要发布代码的图像,将其作为text@JoakimDanielson是一个基础类。文档说它没有成员code
@JeremyP问题不清楚,但在这种情况下,code
是在NSError
中定义的,我找不到urleror
和NSError
之间的关系。那么成员code
是在哪里定义的。@JoakimDanielson@JeremyPI已经知道原因了URLError
符合协议\u BridgedStoredNSError
并且此协议有一个成员code
@JeremyPCan协议Error
符合类NSError
。你能给我一些介绍Error
urleror
和NSError
@Vadim NikolaevI推荐的关系的文档吗。在这里,您可以看到与NSError的关系,也可以阅读有关错误的详细信息,NSError@dowZhangI已经从中了解了原因URLError
符合协议\u BridgedStoredNSError
,并且该协议有一个成员code
@Vadim Nikolaev