IT-Guy007
IT-Guy007

Reputation: 59

Swift Generic Type in class with double protocol inheritance

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

Answers (1)

lazarevzubov
lazarevzubov

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

Related Questions