[swift-evolution] Swift Generic Subtype Problem

Cao Jiannan frogcjn at 163.com
Mon Feb 15 21:48:18 CST 2016


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 <https://forums.developer.apple.com/message/101646#101646>



Thanks!

Jiannan, Cao



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160216/49bac1a2/attachment.html>


More information about the swift-evolution mailing list