How to require that a protocol can only be adopted by a specific class
protocol AddsMoreCommands: class {
// Code
}
extension AddsMoreCommands where Self: UIViewController {
// Code
}
Because of an issue in the previous answer I ended up with this declaration:
protocol AddsMoreCommands where Self : UIViewController {
// protocol stuff here
}
no warnings in Xcode 9.1
This can also be achieved without an extension:
protocol AddsMoreCommands: UIViewController {
// code
}
Which is exactly the same as:
protocol AddsMoreCommands where Self: UIViewController {
// code
}
I usually use the first option, IIRC I read a while ago on the Swift docs that that is the recomended way when the constraint is Self
, if is other constraint such as associate types is when where
can be used.
Notice that since UIViewController
is a class
too, this protocol can be implemented for weak properties such as delegates.
EDITED 2021/01/05: Previous posted solution had a warning, I have removed it and use this one which does not produce any warning.