2016-11-15 4 views
4

Я пытаюсь упроститьСравнить Enum с Associated Value Short Синтаксис

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 
     } 
    }() 
} 

Это только когда вы имеете дело с перечислениями со связанными значениями. Какие-либо предложения?

+3

Чуть проще, но это лучшее, что я мог бы сделать: 'вар isReachable: Bool = {если случай .reachable = состояние {возвращение правда }; return false}() ' – vacawama

ответ

2

Расширение на NetworkReachabilityStatus может сделать эту работу.

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

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

(Так как ваш полный пример ничего не делает) Если ваша мотивация для этого вопроса является то, что вы только хотите, чтобы выполнить какую-то операцию, когда слушатель вызывается с «достижим» (по аналогии с завершением вызывается с success: Bool), вы можете написать:

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

Если вы не были бы удовлетворены удобочитаемость состояние Yoda кого? -вы могли бы объединить его с ответом kkoltzau, которая позволит вам написать:

NetworkReachabilityManager().listener = { status in 
    if status.isReachable { 
     // perform some operation 
    } 
} 
+0

Это был только пример, полная реализация выглядит по-другому. Я просто пытался задать быстрый 3 вопрос о перечислениях со связанными ценностями и равенством. – efremidze

Смежные вопросы