本质上,我的最终目标是有一个协议Log,它强制所有符合它的对象都有一个符合另一个协议[LogEvent]的对象数组。
然而,符合Log的类需要在LogEvent数组中具有特定类型的NumericalLogEvent,例如events,而不是更一般的LogEvent
当我尝试使用下面的代码时,出现错误“Type'NumericalLog'不符合协议'Log'”。
如何确保符合日志的所有内容都有LogEvent类型的events数组,但仍保持打开状态,以确定是哪种类型?

protocol Log {
    var events: [LogEvent] { get set } // Want to enforce events here
}

protocol LogEvent {
    timeStamp: Date { get set }
}

struct NumericalLogEvent: LogEvent {
    timeStamp: Date
    value: Float
}

class NumericalLog: Log {
    var events: [NumericalLogEvent]

    // But getting error here when trying to use more specific type.
}

最佳答案

知道了!
诀窍是设置associatedtype(相当于协议的泛型),然后将其设置为events中的类型。

protocol Log {
    associatedtype Event: LogEvent

    var events: [Event] { get set }
}

09-16 06:09