2017-02-17 2 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で列挙型を使用する利点は、それだけです。あなたはデフォルトを必要としません。開発者はそれをコード化することはできません。 (もう1つの選択肢はenumに.undefinedMailClientのケースを追加し、デフォルトを使用する代わりにそれをコーディングすることです。 – dfd

+1

(1)Swiftの 'switch'は、すでに作成済みのものでなければなりません。 (2)将来、新しい列挙型を 'enum'に追加すると、' switch'が完全ではないので、コンパイラは警告を出します。あなたのコードにしてください。ガイダンスとしてコメントを入れ、それをそのままにしておきます –

答えて

0

エラーを投げたり、デフォルトを変更しますか?人々が使用したくない機能を提供しないでください

関連する問題