2017-02-17 41 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

抛出一个错误或者更改默认值?不要提供你不喜欢的人使用的功能