有没有办法声明通知名称而不重复自己?

时间:2018-11-30 22:50:07

标签: swift

声明通知名称时,有什么方法可以避免这样的错误?

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

2 个答案:

答案 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)