PushRow
параметры требуют соответствия Equatable
.Таким образом, предполагая, что ваш класс Priority
соответствует Equatable
, вы можете использовать функцию follow, которая принимает универсальный уравниваемый тип в качестве параметра для создания PushRow
.
func createPushRow<T: Equatable>(type: T.Type, options: [T]) {
self.form +++ Section(label)
<<< PushRow<T>(String(typeId)) {
$0.title = label.lowercased()
$0.selectorTitle = "Pick " + label.lowercased()
$0.options = options
}
}
. Вы можете просто использовать функциювот так.
self.createPushRow(type: String.self, options: ["option A", "option B"])
Однако вы должны быть осторожны с вашим тэгом PushRow String(typeId)
, хотя Eureka не принимает строки с одним и тем же тегом, поэтому вам, вероятно, захочется передать уникальный тег строки как другойпараметр в обобщенной функции.
Обновлено
Вы можете просто согласовать свою структуру Priority
с Equatable
и CustomStringConvertible
.
struct Priority: Equatable, CustomStringConvertible {
let id: Int
let name: String
var description: String {
return self.name
}
static func == (lhs: Priority, rhs: Priority) -> Bool {
return lhs.id == rhs.id
}
}