ios - 快速确定委托(delegate)属性的类别

标签 ios delegates swift

我在快速确定委托(delegate)背后的类(class)时遇到问题。在我的应用程序中,有一个名为 DataSource 的类和一个名为 DataSourceDelegate 的协议(protocol),通常交给 Controller 来管理。

DataSource 的子类可以来自单个源,或者如果它们包含多个 DataSource 实例,则它们必须符合 DataSourceDelegate。

DataSource 不符合 DataSourceDelegate,但它的一些子类符合。因此,为了确定根数据源,我检查委托(delegate)的类。如果委托(delegate)不是 DataSource 或其任何子类,则返回 true。

代码:

protocol DataSourceDelegate: class {

}

class DataSource {

  var delegate: DataSourceDelegate?

}

class BasicDataSource: DataSource {

}

class ComposedDataSource: DataSource, DataSourceDelegate {

}

class SegmentedDataSource: DataSource, DataSourceDelegate {

}

class DataSourceManager: DataSourceDelegate {

}

let dataSourceManager = DataSourceManager()
let composedDataSource = ComposedDataSource()
let dataSource = DataSource()
dataSource.delegate = composedDataSource // dataSource is not root
composedDataSource.delegate = dataSourceManager // composedDataSource is root


if dataSource.delegate is DataSource {
  //It is not a root data source
} else {
  //It is a root data source
}

问题是 if 语句抛出编译错误,指出:类型“DataSource”不符合协议(protocol)“DataSourceDelegate”。还有其他方法可以检查吗?

提前致谢

最佳答案

就其值(value)而言,这是有效的:

if (dataSource.delegate as AnyObject?) is DataSource

关于ios - 快速确定委托(delegate)属性的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255018/

相关文章:

ios - UITextView 字体为零

ios - 有没有办法拦截应用程序中的音频输出以在 iOS 上显示音频可视化工具?

ios - 解决 iOS 应用程序在分发版本中崩溃的问题

ios - 需要在带有自定义单元格的tableView中的viewDidLoad中实现委托(delegate)方法

ios - UITableView Delegate 在设备和模拟器上的调用方式不同?

ios - PSCollectionView 不执行 cellForRowAtIndex

swift:实时显示mkdirection指令

ios - 试图在同一个表格 View 中创建不同的单元格 - 但无法弄清楚如何在 tableviewcontroller 中编码

ios - 如何在 appearance() 中更改 UIButton titlelabel 字体样式和大小?

ios - 核心数据文件的位置 iOS 10