У меня есть протокол, который использует соответствующий тип, как таковой:тестирование соответствия протокола с соответствующими типами
protocol Populatable {
typealias T
func populateWith(object: T)
}
и классы, которые реализуют протокол:
class DateRowType: Populatable {
func populateWith(object: NSDate) {
print(object.description)
}
}
class StringRowType : Populatable {
func populateWith(object: String) {
print(object)
}
}
, но когда я пытаюсь бросить или тест на соответствие, например:
let drt = DateRowType()
let srt = StringRowType()
let rowTypes = [drt, srt]
let data = [NSDate(), "foo"]
for (i, p: Populatable) in enumerate(rowTypes) {
p.populateWith(data[i])
}
Я получаю ошибку:
Protocol 'Populatable' can only be used as a generic constraint because it has Self or associated type requirements
Каков правильный способ проверить, соответствует ли объект протоколу Populatable?
Примечание: весь код, необходимый для проверки этого вопроса, содержится в вопросе, просто скопируйте блоки кода в игровое поле.
Я хочу иметь другие классы класса Row, которые принимают другие типы в качестве параметра для функции заполнения. Сейчас массив событий неоднороден, но в будущем может содержать несколько типов, реализующих протокол Populatable. – Senior
Каждая строка будет заполнена другим типом, поэтому я хочу, чтобы мой протокол был общим, чтобы одна строка могла реализовать его как заполнить (объект: событие), другой может быть заполнен (объект: команда) и т. Д. Без generic, я должен был бы использовать использование popup (object: AnyObject), которое удаляет много удовольствия от использования Swift. – Senior
Заселение не принимает Populatable, оно содержится в протоколе Populatable. Populatable определяет метод для другого класса, в данном случае NSObject для использования в качестве контроллеров WKInterfaceTable. – Senior