我真的很困惑 Xcode 抛给我的这个错误。它说 Switch 语句必须详尽无遗
。不过,我 100% 肯定我正在处理所有案件。
这是我的代码:
enum Search: Endpoint {
case sets(query: String?, creator: String?, imagesOnly: Bool?, autocomplete: Bool?, modifiedSince: TimeInterval?, page: Int?, perPage: Int?)
case classes(query: String, page: Int?, perPage: Int?)
case universal(query: String, page: Int?, perPage: Int?)
public var baseURL: String { return QuizletEndpoint.baseURL }
public var version: Float { return QuizletEndpoint.version }
public var path: String {
switch self { // Switch must be exhaustive ERROR.
case .sets:
return "search/sets"
case .classes:
return "search/classes"
case .universal:
return "search/universal"
}
}
}
更新#1
以下是有关我的协议(protocol) Endpoint
的详细信息:
/// Represents an Endpoint for networking.
public protocol Endpoint: URLConvertible, URLRequestConvertible {
/// The url without any parameters or paths.
var baseURL: String { get }
/// The version of the API.
var version: Float { get }
/// The path to the resource.
var path: String { get }
/// Any parameters to be encoded.
var params: Parameters { get }
}
public extension Endpoint {
public func asURL() throws -> URL {
let finalURL = try baseURL.asURL().appendingPathComponent("\(version)").appendingPathComponent(path)
return finalURL
}
func asURLRequest() throws -> URLRequest {
let finalURL = try asURL()
let request = URLRequest(url: finalURL)
return try URLEncoding.default.encode(request, with: params)
}
}
更新#2
好的,现在我几乎可以肯定这是一个 Xcode 错误。将 default
子句添加到我的枚举中会生成一个编译器警告,指出 default
子句永远不会被执行,因此编译器有点同意 default
子句是冗余:
public var path: String {
switch self {
case .sets:
return "search/sets"
case .classes:
return "search/classes"
case .universal:
return "search/universal"
default: return "" // WARNING: Default will never be executed.
}
}
我是疯了还是这是一个 Xcode 错误?我尝试多次清理构建文件夹、定期清理、重建,但似乎无法消除此错误。我开始相信这是 Xcode 中的一个错误,因为我正在运行测试版,但我只是想仔细检查并确保这不是我这边的错误。
最佳答案
有时 Swift 无法检测到您已经掌握了所有可能的情况。
你最好的选择是只添加一个 default:
case 后跟 break
。
但是请注意,如果您从 enum
中删除 : Endpoint
类型,您的代码在 Xcode 8.3.3 中工作正常。那是什么类型的?
关于swift - Switch 语句必须详尽 - Xcode 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44713594/