Swift: структура выглядит как регистр перечисления, за которым следует (.) - PullRequest
0 голосов
/ 12 октября 2019

Я читал чей-то еще фреймворк-код и обнаружил, что один из параметров функций принимает входные данные, за входом следует (.), И когда я проверял тип входных данных, я обнаружил, что этоstruct not enum, что меня запутало1006 * Снимок экрана параметра функции

и вот как я узнал, что тип параметра является структурой, а не перечислением Тип параметра функции

любойобъяснение, почему параметр выглядит как регистр перечисления?

спасибо

1 Ответ

2 голосов
/ 12 октября 2019

Этот синтаксис точки не зарезервирован для перечислений. Его можно использовать для любого члена рассматриваемого типа.

Например, рассмотрим:

struct Foo {
    struct Bar {
        let value: Int
    }
}

extension Foo.Bar {
    static let baz: Foo.Bar = Foo.Bar(value: 42)
}

func qux(_ type: Foo.Bar) { 
    print(type.value)
}

Поскольку baz является статическим членом struct, вы можете затемВы можете сделать что-то вроде:

qux(Foo.Bar.baz)

Или, альтернативно, потому что он ожидает экземпляр Foo.Bar, просто:

qux(.baz)

Давайте рассмотрим более практичный пример. Например, вы можете определить свое собственное уведомление:

extension Notification.Name {
    static let myCustomNotification = Notification.Name("com.domain.app.myNotification")
}

Тогда, поскольку параметр name следующего метода ожидает Notification.Name, вы можете делать такие вещи, как:

NotificationCenter.default.addObserver(forName: .myCustomNotification, object: nil, queue: .main) { notification in
    print(notification)
}
...