there is a exmaple Generic type not equal in extension
because swift does't support generic type not equal in extension, so I think if I could use a subclass to distinguish when I don't need the userInfo
and I am sorry I make a mistake, init
(use1: Bool) -> R where Self == C, R: C is never work, because swift can't infer R, even you use some C