在Objective-C中,自定义通知只是一个简单的NSString,但在Swift 3的WWDC版本中,它并不明显,只是它应该是什么.

推荐答案

你也可以使用一个协议

protocol NotificationName {
    var name: Notification.Name { get }
}

extension RawRepresentable where RawValue == String, Self: NotificationName {
    var name: Notification.Name {
        get {
            return Notification.Name(self.rawValue)
        }
    }
}

然后将你的通知名定义为enum.例如:

class MyClass {
    enum Notifications: String, NotificationName {
        case myNotification
    }
}

像这样使用它

NotificationCenter.default.post(name: Notifications.myNotification.name, object: nil)

这样,通知名称将与基础Notification.Name解耦.你只需要修改你的协议,以防Notification.Name个版本的实现发生变化.

Swift相关问答推荐

使SCNode透明,以便您通过它查看其他 node

自定义完整屏幕封面动画

如何在一个角色隔离类上编写自定义==实现?

如何使用swift宏生成一个带有关联值的枚举?

如何在枚举有关联数据时使用combined if with case

如何在macOS中延迟退出应用程序的退出操作?

如何通过 Enum 属性使用新的 #Predicate 宏获取

在 RealityKit 中查找特定模型的 findEntity(named:) 方法的替代方法?

有没有一种方法可以访问封闭实例ObservableObject以从属性包装器中的任何位置调用objectWillChange.send()

从 actor 的 init 方法调用方法

swift 是否遇到 Java 的 2gb 最大序列化大小问题?

自定义选取器的出现导致其他视图重新排列

引用类型(类)不需要但 struct 需要的可识别 id

获取 SwiftUI 中 Binding 的值更改更新

如何在 Swift 中返回 Task 中定义的变量

如何删除桥头而不出错?

FirebaseStorage:如何删除目录

Swift 中惰性 var 的优势是什么

如何快速识别字符串中的大写和小写字符?

Swift 的 JSONDecoder 在 JSON 字符串中有多种日期格式?