基本上,我的最终目标是拥有一个协议Log
,强制所有符合它的对象都有一个符合另一个协议[LogEvent]
的对象数组。
但是,符合Log
的类需要具有特定类型的LogEvent
,例如NumericalLogEvent
数组中的events
,而不是更一般的LogEvent
。
我收到错误"输入' NumericalLog'不符合协议' Log'"当我尝试使用下面的代码时。
如何确保符合日志的所有内容都具有某些事件数组,类型为LogEvent,但是它确实打开了哪个类型?
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.
}
答案 0 :(得分:1)
知道了!
诀窍是设置associatedtype
(相当于协议的通用),然后将其设置为events
中的类型。
protocol Log {
associatedtype Event: LogEvent
var events: [Event] { get set }
}