[swift-evolution] Swift Generic Subtype Problem

Cao Jiannan frogcjn_icloud at icloud.com
Mon Feb 15 21:46:48 CST 2016

Hi all,
I want to discuss on optional generic sub-typing problem.

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?
class MyTableView : UITableView {

MyTableViewController {  
      @IBOutlet var tableView: MyTableView!  

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>


Jiannan, Cao

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

More information about the swift-evolution mailing list