[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