swift - Switch 语句必须详尽 - Xcode 错误?

标签 swift xcode

我真的很困惑 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/

相关文章:

ios - UINavigationController 有哪些导航替代方案?

swift - 如何在 Swift 中将参数传递给 NSExpression 的自定义 NSNumber 函数?

ios - Firebase 导致 "Thread 1: signal SIGABRT"

swift - 有没有一种方法可以使用 sdcalertview 在警报 View 中添加表格 View ?

ios - 如何在通知处理程序中同步数据: Swift 4

ios - 如何更改 UIBarButtonItem 的选择区域?

ios - Swift 包管理器 - 自定义框架

iOS 框架,嵌入另一个框架或库?

objective-c - 估计信标 : Set up broadcasting interval

xcode - 创建 Xcode 项目模板需要了解什么?