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

时间:2018-09-19 19:48:16

标签: swift generics casting

如果此类是通用类,如何检查对象是否为给定类的实例?

class DataSource<ItemType> {
}

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

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

目标C中的相同代码(功能齐全):

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

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

根据您的需求,您可以创建一个协议来区分您的不同情况,并使您的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"