Этот синтаксис точки не зарезервирован для перечислений. Его можно использовать для любого члена рассматриваемого типа.
Например, рассмотрим:
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)
}