2017-02-17 38 views
0

我正在寫一個課程,讓用戶選擇在從我們的應用發送電子郵件時想要使用哪個電子郵件應用。如何防止未來的開發者濫用`switch``default`子句?

我正在嘗試執行以下操作,但因爲指定了default而發出警告。 default在那裏,因爲我想阻止未來的開發者使用默認值,而不是爲他們添加的任何客戶端添加案例。

private enum EmailApp { 
    case appleMail 
    case gmail 
    case outlook 

    typealias EmailAppConfiguration = (title: String, scheme: String?, path: String?) 

    var configuration: EmailAppConfiguration { 
     switch self { 
     case .appleMail: 
      return ("Apple Mail", nil, nil) 
     case .gmail: 
      return ("Gmail", "googlegmail://", "co") 
     case .outlook: 
      return ("MS Outlook", "ms-outlook://", "compose") 
     default: 
      preconditionFailure("Unhandled email client. DO NOT use the default. Explicitly define the configuration when you add a new app.") 
     } 
    } 
} 

我不喜歡這個警告。我可以在切換之前放置一個guard以執行預處理失敗,但它也會很糟糕。你會怎麼做?

+3

只需簡單地從switch語句中刪除默認值即可。在Swift中使用枚舉的優點就是 - 你不需要*默認。開發人員無法對其進行編碼。 (另一種方法是在你的枚舉中添加一個.undefinedMailClient案例,並使用代碼來代替它,而不是使用默認值。 – dfd

+1

(1)Swift'switch'必須是詳盡的,你已經這麼做了,不需要使用'default'。 (2)如果將來爲'enum'添加一個新的'case',編譯器會給你一個警告,因爲'switch'不再詳盡。(3)你不能告訴下一個開發者會怎麼做對你的代碼做些什麼,把一個評論作爲指導,並留在那裏 –

回答

0

拋出一個錯誤或者更改默認值?不要提供你不喜歡的人使用的功能