Как проверить, является ли объект экземпляром данного класса, является ли этот класс универсальным? - PullRequest
0 голосов
/ 19 сентября 2018

Как проверить, является ли объект экземпляром данного класса, является ли этот класс универсальным?

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 голосов
/ 20 сентября 2018

Короче говоря, вы не можете.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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...