Reputation: 59
I've got 2 protocols:
protocol FirestoreInitializable {
protocol Training: FirestoreInitializable {
Now when creating a generic class conforming to FirestoreInitializable
class FirestoreListener<T>: ObservableObject where T: FirestoreInitializable {
When using it:
@Published var allTrainings: FirestoreListener<Training>
It generates the error:
Type 'any Training' cannot conform to 'FirestoreInitializable'
Now because the protocol is generic it won't work, only with specifying the specific struct, how can I use all structs conforming to Training use this class?
Upvotes: 0
Views: 55
Reputation: 2285
As pointed out in the comments, generic parameters must be something specific, not protocols. But you can avoid using a concrete class for allTrainings
by introducing another generic parameter to constrain it:
class Test<SomeTraining: Training> {
@Published var allTrainings = FirestoreListener<SomeTraining>()
}
(Assuming you have everything declared as you described in the original question:)
import Combine
protocol FirestoreInitializable { }
protocol Training: FirestoreInitializable { }
class FirestoreListener<T: FirestoreInitializable>: ObservableObject { }
Upvotes: 1