【发布时间】:2020-05-25 20:24:06
【问题描述】:
我有一个Transaction 协议。由几个结构体实现:Income、Expense 等。
然后我有一个通用的TransactionMananger 类:
class TransactionManager<T:Transaction>: ObservableObject {
private let key:String = String(describing: T.self)
@Published var items: [T]
// ...
效果很好。
现在我正在尝试构建一个视图,它将接收任何类型(收入、支出等)的TransactionManager。
struct TransactionView: View {
@ObservedObject var manager: TransactionManager<???>
var body: some View {
Text("Hello")
}
}
我不知道如何指定这应该是任何Transaction。当我使用 Transaction 本身时,编译器会说:
协议类型'Transaction'的值不能符合'Transaction';只有结构/枚举/类类型可以符合协议
【问题讨论】:
-
manager 在 TransactionView 中是私有的,那么什么时候设置这个属性呢?
-
我的错,它不应该是私人的
-
也许问问自己为什么在这里需要一个泛型。为什么仅仅在管理器对象中使用
Transaction协议是不够的?如果您确实想使用泛型,那么您的视图也需要使用泛型,如 Sorin 所示