美文网首页
Swift 中同时声明继承和协议

Swift 中同时声明继承和协议

作者: 水果宾治武士 | 来源:发表于2017-06-04 21:22 被阅读105次

以前写OC的时候经常会有这样一种写法:

UIViewController <SomeDelegate>* obj;

这样声明的一个obj, 意味着它继承了UIViewController, 同时还实现了SomeDelegate。
但在Swift里面,就显得不那么友好了,因为Swift是没有办法声明一个变量同时继承某个类和实现某个协议的。最接近的形式是组合协议,比如swift 3.0里面

var vc:UITableViewDelegate & UITableViewDataSource

声明的vc同时实现UITableViewDelegate 和 UITableViewDataSource 两个协议。

let vc:UIViewController & UITableViewDataSource

显然,这是编译不过的。

在网上找了很久,发现这个问题的答案貌似暂时还是无解。

stackoverflow上也有相关的讨论:
https://stackoverflow.com/questions/35452785/swift-protocol-of-a-particular-class

里面给出的答案是声明两个变量,一个作为子类声明,一个作为协议声明,然后在赋值函数里面用泛型做好限制。作为一个不对外暴露的属性,这样做勉强还可以,就是太复杂了。

不过细想一下,也许是因为Swift本身的设计思想是鼓励面向协议编程,所以不希望出现这种同时声明继承和协议的情况出现。所以最终的思路还是建议在程序实现上使用纯粹的面向协议的方式,放弃这个ObjC的坏习惯(也许是)吧。

相关文章

  • Swift 中同时声明继承和协议

    以前写OC的时候经常会有这样一种写法: 这样声明的一个obj, 意味着它继承了UIViewController, ...

  • swift中关于协议或接口的编程(protocol),POP的概

    1.swift中的协议都是继承与NSObjectProtocol协议的,如果不写上继承这个协议,你们声明的dele...

  • (实验)Swift 面向协议

    协议 swift中协议中可以声明属性,静态属性,方法,静态方案 子类如果继承了协议而不去实现其中的内容,编译就会通...

  • swift方法参数遵守多继承和遵守多个协议

    参数继承协议 OC中 id Swift 3 protocol Swift 4 A & B 文档

  • Swift2.0 代理的使用

    标签(空格分隔): IOS-Swift [toc] 声明一个代理协议 声明代理属性 调用代理方法 给代理赋值 继承...

  • Swift - 协议(protocol)

    Swift - 协议(protocol) 1、Swift中协议类似于别的语言里的接口,协议里只做方法的声明,包括方...

  • Swift--类继承

    继承概念 构造函数继承 重写 类型检查与转换 在Swift中,类的继承只能是单继承,而多继承可以通过遵从多个协议实...

  • Swift枚举高级用法(Enum)

    关于swift的枚举 一 swift对于枚举的扩展性(Enum) 枚举的继承(继承任何类和协议,目前除了swift...

  • IOS父类与子类

    一.继承: 子类可以直接复用父类中的成员.子类继承父类所有方法的声明和实现 非私有的实例变量以及协议 继承时要在....

  • 类和结构体

    类+继承 结构体+协议 Swift 是面向协议编程一个类可以积分另一个类的方法, 属性和其他特性. 在Swift...

网友评论

      本文标题:Swift 中同时声明继承和协议

      本文链接:https://www.haomeiwen.com/subject/nvjbfxtx.html