Multiple inheritance isn't supported in ObjC or Swift, but that doesn't mean it's impossible in OOP; C++ has supported multiple inheritance for a LONG time.
Anyhow, you missed my point.
Generics allow you to constrain to specific, homogeneous types.
func foo<T>(items: [T]) { ... }
Items must be an array made up of items of T.
func foo(items: [T]) { ... }
If T is a protocol, then items can be an array made up of anything that conforms to T. This was talked about in the talk when walking through the historical issues with OOP.
Another example where the combination of protocol extensions and a generic type system really compliment one another:
extension Equatable where Self : Drawable {
func isEqualTo(other: Drawable) -> Bool {
guard let o = other as? Self else { return false }
return self == o
}
}
That protocol extension is not possible to write without generics.