我很好奇,有没有一个预先存在的协议,它的唯一要求是没有参数的init?我正在创建一个泛型,它需要能够在不担心任何参数的情况下初始化关联类型.这似乎需要一个这样的协议:

protocol HasEmptyInitializer {
    init()
}

这似乎是一个非常基本的协议,在许多情况下都可能需要.在我用上面的内容污染我的协议空间之前,我想知道基金会或其他第一方库中是否已经有类似的东西了.有没有人知道这样的事情?

推荐答案

这是一个非常著名的非协议,因为它缺乏语义.有关为何这故意不是SWIFT中的协议的背景信息,请参阅Ole Begemann‘s Writeup Protocols are more than Bags of Syntax.如果您有一个语义上有意义的协议,并且只有这个要求,那么创建它是没有问题的,但它是相当罕见的.

OLE的写作(汇集了许多其他对话)的基本观点是,协议不仅仅是"它有这个方法"(即语法).这是关于它促进了什么样的算法."+"不是一个很好的协议来覆盖"你可以应用+的东西".+对Ints的意义与+对Collection的意义并不相同(后者甚至不是可交换的).类似地,"Makable by call init()"不会告诉您任何关于结果对象的含义.是"空的吗?"一些未指明的"默认"值?无效?协议的语义比语法更重要.

Swift相关问答推荐

map 视图上的SwiftUI渐变折线

如何将泛型函数存储到变量中?

RealityKit(VisionOS)中的PhysicBodyComponent和DragGesture

阻塞(受CPU限制的)任务的异步功能?

如何把多个可观测性变成一个完备性?

如何在应用程序区域永久更改 NSCursor?

我如何在 swift 中的 viewdidload 之前进行委托?

SwiftUI:列表背景为空列表时为黑色

在领域 SwiftUI 异常中使用 Apple 登录:无法识别的 Select 器发送到实例

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

覆盖一个子元素的 HStack 对齐方式

Swiftui 无法从核心数据中获取数据

如果 Swift 无法分配内存会怎样?

UUID 哈希值是不确定的吗?

RxSwift 提高性能

即使设置为从不也可以访问 iOS11 照片库

如何从元组数组创建字典?

Swift - 导入我的 swift 类

如何在 Swift 中判断变量的类型

在 xcode8 中找不到 ModuleName-Swift.h 文件