swift - 如果这个类是通用的,如何检查一个对象是否是给定类的实例?

标签 swift generics casting

如果这个类是通用的,如何检查一个对象是否是给定类的实例?

class DataSource<ItemType> {
}

[...]
func Test() {
    [...]
    let result = dataSource?.isKind(of: DataSource)
    print(result)
}

我收到此错误消息:无法推断通用参数“ItemType”

objective-c 中的相同代码(功能齐全):

@interface DataSource <ItemType : id> : NSObject
@implementation DataSource

if ([dataSource isKindOfClass:[DataSource class]]) { 
}

谢谢

最佳答案

长话短说,你不能。 Swift 不会让您调用具有不完整类型的函数,因为它无法为其生成代码(在机器级别)。

根据您的需要,您可以创建一个协议(protocol),为您的不同情况提供判别式,并使您的 DataSource 符合它:

enum Discriminant {
  case dataSource, notDataSource
}

protocol Discriminable {
  static var discriminant: Discriminant { get }
}

extension DataSource: Discriminable {
  static var discriminant: Discriminant { return .dataSource }
}

// ...

let result = type(of: dataSource).discriminant == .dataSource
print(result) // Prints "true"

关于swift - 如果这个类是通用的,如何检查一个对象是否是给定类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52413244/

相关文章:

swift - 在其构造函数中创建带有闭包的成员变量

java - 有没有办法在调用泛型/参数化方法时强制提供类型参数?

c - 我是否要转换 malloc 的结果?

ios - 如何在终端上从 xcarchive 导出 dsym 文件

ios - 从 Swift 数组中删除具有重复属性的对象

java - 如何使用枚举实现接口(interface),接口(interface)扩展 Comparable?

java - <T> T 用作方法签名时是什么意思?它是返回类型吗?

c++ - 如何在没有直接继承的情况下访问基类容器中的派生对象

c++ - C++中数组索引的奇怪类型分配

swift - 有没有办法使用相同的变量名链接多个 if-let 语句?