First I have this a protocol to check the conformance:
protocol NavigationDelegatable{
associatedtype NavigationDelegateConformance
var navigationDelegate: NavigationDelegateConformance? {get set}
}
Then in ViewController I implement:
class UserDataViewController: UIViewController, NavigationDelegatable {
var navigationDelegate: UserDataNavigationDelegate?
}
The UserDataNavigationDelegate is some other protocol
protocol UserDataNavigationDelegate: class {
func edit(user: NSData)
}
Then in other extension
class func instantiateViewController(fromStoryboardName name: UIStoryboard.Name, withIdentifier identifier: UIStoryboard.Identifier, withNavigationDelegate navigationDelegate: AnyClass) -> UIViewController? {
if let viewController = UIStoryboard(name: "wololo").instantiateViewController(withIdentifier: "bar") as? NavigationDelegatable {
viewController.navigationDelegate = navigationDelegate
}
return viewController
}
I don't have the class that will be instantiated, I only need to check if it conforms with NavigationDelegatable to set the property, then I've got the error:
Protocol 'NavigationDelegatable' can only be used as generic constraint because it has Self or associated type requirements
There's a way to do it?
By the way, it's NOT the same question of this, this and this because no one wants to assign a value for the generic property.