比较枚举与关联值短语法

时间:2016-11-15 22:08:03

标签: swift enums swift3

我试图简化

var isReachable = {
    switch status {
    case .reachable: return true
    default: return false
    }
}()

类似

var isReachable = (case status == .reachable)

以下是完整示例:

enum NetworkReachabilityStatus {
    case unknown
    case notReachable
    case reachable(Alamofire.NetworkReachabilityManager.ConnectionType)
}

NetworkReachabilityManager().listener = { status in
    var isReachable = {
        switch status {
        case .reachable: return true
        default: return false
        }
    }()
}

当您处理具有关联值的枚举时,这只是一个问题。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

NetworkReachabilityStatus上的扩展程序可以使其正常工作。

extension NetworkReachabilityStatus {
    var isReachable: Bool {
        switch self {
            case .reachable(_): return true
            default: return false
        }
    }
}

NetworkReachabilityManager().listener = { status in
    var isReachable = status.isReachable
}

答案 1 :(得分:0)

(因为你的完整示例没有做任何事情)如果你对这个问题的动机是你只想在用“可达”调用监听器时执行某些操作(类似于用{{1}调用的完成}),你可以写:

success: Bool

如果你不满意可读性 - Yoda条件任何人? - 你可以将它与kkoltzau的答案结合起来,这样你就可以写下:

NetworkReachabilityManager().listener = { status in
    if case .reachable(_) = status {
       // perform some operation
    }
}