Antonin
Antonin

Reputation: 71

Swift associated types and protocol inheritance

I'm using Swift 2.2 and I declared a protocol with associated type as follow:

protocol CollectionViewModeling {
    associatedtype CellType
    func cellAtIndexPath(indexPath: NSIndexPath) -> CellType
}

Now I have a view model protocol conform to the above protocol :

enum MyItemCell {
    case MyItemCell1, MyItemCell2
}
protocol ItemsListViewModeling: CollectionViewModeling {
    associatedtype CellType = MyCell
}

Finally, somewhere else, I want to declare a var that is conform to le protocol ItemsListViewModeling :

var viewModel: ItemsListViewModeling

And I'm getting this error :

Protocol 'ItemsListViewModeling' can only be used as a generic constraint because it has Self or associated type requirements

But I can easily create a class that implements this protocol.

Is it possible to declare a var to an associated typed protocol ? As I'm giving the final type of the associated type in the protocol ItemsListViewModeling, I don't understand why am I seeing this error from the compiler.

Thanks

Upvotes: 7

Views: 3567

Answers (1)

Tikhonov Aleksandr
Tikhonov Aleksandr

Reputation: 14329

See there stackoverflow.com

You can't treat protocols with associated types like regular protocols and declare them as standalone variable types.

Upvotes: 1

Related Questions