Пропуск пространств имен в быстром - PullRequest
1 голос
/ 21 марта 2019

У меня проблема с пропуском пространств имен в swift

struct Constant {
    static let loginAPI: String = "login"
    static let signUpAPI: String = "signup"
}

class Network {
    var api: String
    init(api: String) {
        self.api = api
    }
}

var network = Network(api: Constant.loginAPI)

Вместо использования Constant.loginAPI Я просто хочу использовать .loginAPI. Как это возможно?

1 Ответ

2 голосов
/ 21 марта 2019

Вы можете использовать enum вместо:

enum API: String {
    case login = "login"
    case signUp = "signup"
}

class Network {
    let api: API
    init(api: API) {
        self.api = api
    }
}

let network = Network(api: .login)

И, когда Network требуется строковое значение, он может использовать api.rawValue. Или, если вам действительно не нужны эти строки, вы можете еще больше упростить их:

enum API {
    case login
    case signUp
}

Хотя я думаю, что вышеприведенный enum является естественным шаблоном при попытке указать одно из ряда предопределенных значений, стоит отметить, что вы можете добиться чего-то похожего с struct:

struct API {
    let value: String

    static let login = API(value: "login")
    static let signUp = API(value: "signup")
}

class Network {
    var api: API
    init(api: API) {
        self.api = api
    }
}

let network = Network(api: .login)

И, в этом случае, Network может получить доступ к api.value для получения строкового значения.

Однако при таком подходе struct ничто не мешает кому-то сделать что-то потенциально недопустимое, например:

extension API {
    static let foo = API(value: "bar")
}

let network = Network(api: .foo)

Или просто сделать это напрямую:

let network = Network(api: API(value: "baz"))

Таким образом, вы используете этот шаблон struct, только если динамическое добавление значений может иметь смысл. Например, при работе с NotificationCenter было бы неплохо создать свои собственные Notification.Name статические значения, потому что можно как публиковать, так и наблюдать собственные пользовательские уведомления, но вы все равно можете использовать удобный синтаксис.

Все сказанное в данном случае перечисление является естественным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...