【发布时间】:2022-02-19 19:53:43
【问题描述】:
在我的域模块中,我定义了一个协议分配、时间日志和分配时间日志。
在定义具体实现时,我想使用泛型来符合 AssignmentTimeLog 协议。为此,我将我的通用 A、T 参数限制为 Domain.Assignment 和 Domain.TimeLog 类型。为什么这不满足协议要求?我想了解发生了什么的逻辑。
// Domain Module
public protocol AssignmentTimeLog {
var assignment: Assignment { get }
var timeLog: TimeLog { get }
}
// My attempt to create an implementation trows an error
// Error:
// Type 'AssignmentTimeLog<A, T>' does not conform to protocol 'AssignmentTimeLog'
import Domain
struct AssignmentTimeLog<A, T>:
Domain.AssignmentTimeLog where A: Domain.Assignment, T: Domain.TimeLog {
var assignment: A
var timeLog: T
}
对于上下文:使用泛型的原因是稍后我想在 AssignmentTimeLog 上定义一个扩展,其中 A & T 还实现另一个协议。这提供了额外的功能而无需额外的代码。具体类型实现域协议以及那些附加协议。
我试图通过阅读文档和多个博客来弄清楚这一点。但我似乎无法准确解决我所拥有的理解问题/差距。
【问题讨论】:
-
你需要
AssignmentTimeLog协议做什么?只要有一个AssignmentTimeLog<A, T>结构就足够了,不是吗? -
这与我使用的架构有关。 MVVM,其中虚拟机和视图只能访问域模块中定义的协议。具体实现在一个单独的模块中。