声明通知名称时,有什么方法可以避免这样的错误?
extension Notification.Name {
static let userHasLoggedIn = Notification.Name("userHasLoggedIn")
//oops! developer forgot to change the literal...
static let userHasLoggedOut = Notification.Name("userHasLoggedIn")
}
我希望以某种方式将变量名用作通知名,而不必重新输入。像这样:
extension Notification.Name {
//wishful thinking??
static let userHasLoggedIn = Notification.Name(#fieldname)
static let userHasLoggedOut = Notification.Name(#fieldname)
}
答案 0 :(得分:0)
您可以使用Sourcery。
我没有用过,但是它是一个使用模板来生成样板代码的代码生成器。
您可以创建将userHasLoggedIn
转换为static let userHasLoggedIn = Notification.Name("userHasLoggedIn")
的模板或规则(很抱歉,不知道实际术语)。
答案 1 :(得分:-2)
您可以将枚举数与String一起使用,如下所示:
enum Names: String {
case logIn = "userHasLoggedIn"
case logOut = "userHasLoggedOut"
}
然后在您的代码中,您可以说:
static let userHasLoggedIn = Notification.Name(Names.logIn.rawValue)
static let userHasLoggedOut = Notification.Name(Names.logOut.rawValue)