swift - 控制子类是否符合基类中的协议是否合法、安全或有目的
问题描述
我想知道控制协议是否符合基类是否是一种好习惯。在我看来,这不是一个好习惯,因为基类应该包含所有应该与子类相关的属性和方法。并且基类不应该知道子类是否符合协议。
一个示例用法;
class BaseClass: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let self = self as? SomethingAble {
self.doIt()
}
}
}
protocol SomethingAble {
func doit()
}
谢谢,
解决方案
您有很多方法可以实现可选协议,因此其中一种:
首先:
Swift 有一个特性叫做extension
,它允许我们为那些我们希望是可选的方法提供默认实现。
protocol SomethingAble {
func optionalMethod()
func notOptionalMethod()
}
extension SomethingAble {
func optionalMethod() {
//this is a empty implementation to allow this method to be optional
}
}
第二:
@objc protocol SomethingAble {
@objc optional func optionalMethod()
}
推荐阅读
- matlab - 使用逆变换采样在matlab中生成均匀分布在空心球体上的K个无人机的位置
- influxdb - 如何在 InfluxDB 中永久合并两个测量值
- c++ - 为可变模板的每个参数调用模板函数
- java - UCAExc:::5.0.0-SNAPSHOT 用户缺少权限或找不到对象:语句 [UPDATE PersonSET address = 'null' WHERE name = 'null'] 中的 PERSONSET
- video - Safari 多次下载 MP4
- r - 从 R 中的 JSON 文件中拆分数据的巨大问题
- azure - 如何使用 CLI 创建具有 enpoint 类型 Azure Function 的事件订阅?
- python - 覆盆子:没有名为 flask_api 的模块
- python - to_sql() 缺少 1 个必需的位置参数:'con'
- linux - 已解决:使用 RSA 令牌通过主机到网络上的服务器的 Docker 容器隧道