[swift-evolution] Swift Generic Subtype Problem

Developer devteam.codafi at gmail.com
Mon Feb 15 22:29:59 CST 2016


OK, so you have covariance covered, now what about contravariance?  Surely a structure like this

struct Arrow<A, B> {
  let unArrow : A -> B
}

should be contravariant in its first argument and covariant in its second.

~Robert Widmann

2016/02/15 22:48、Cao Jiannan via swift-evolution <swift-evolution at swift.org> のメッセージ:

> 
> Hi all,
> I want to discuss on a problem  about optional generic sub-typing.
> 
> This is my suggesion.
> 
> if B is subclass of A
> Either<B,B> is subclass of Either<A,A>, Either<A,B>, Either<B,A>
> Either<B,A> is subclass of Either<A,A>
> Either<A,B> is subclass of Either<A,A>
> 
> 
> Why? Let’s see an example code in a real project:
> 
> 
> 
> Here is a protocol type for some UIViewController,
> protocol  SegueHandlerType {  
>     var tableView: UITableView! { get }  
> }  
> 
> so the UITableViewController can conform to the protocal
> extension UITableViewController : SegueHandlerType {  
> }  
> 
> It's great!
> What if the tableView is a subclass UITableView?
> like:
> class MyTableView : UITableView {
> }
> 
> MyTableViewController {  
>       @IBOutlet var tableView: MyTableView!  
> }  
> 
> Then 
> extension MyTableViewController:SegueHandlerType {  
>   
> }  
> will trigger a compiler error.
>  
> So the Optional needs a subclass system.
> Or to say, that the template system needs a subclass system.
>  
> Optional<UITableView> should be the super type of Optional<MyTableView>
> Array<UITableView> should be the super type of Array<MyTableView>
> 
> https://forums.developer.apple.com/message/101646#101646
> 
> 
> 
> 
> Thanks!
> 
> Jiannan, Cao
> 
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160215/dd9aceed/attachment.html>


More information about the swift-evolution mailing list