如何使用通用参数类型创建 PushRow 函数
How to create PushRow function with generic parameter type
我有不同的功能来创建不同类型的 PushRow。
它还包括字符串类型和自定义类型。如何将这些函数合并为一个函数,该函数接受用于创建 PushRow
的通用参数
fileprivate func createPushRow1() {
form +++ Section(label)
<<< PushRow<String>(String(typeId)) {
[=10=].title = label.lowercased()
[=10=].selectorTitle = "Pick " + label.lowercased()
[=10=].options = optionList
}.onChange({ [unowned self] row in
row.value = row.value
})
}
fileprivate func createPushRow2() {
self.form +++ Section(label)
<<< PushRow<Priority>(String(typeId)) {
[=10=].title = label.lowercased()
[=10=].selectorTitle = "Pick " + label.lowercased()
[=10=].options = priorityList
[=10=].displayValueFor = {
guard let priority = [=10=] else { return nil }
return priority.name
}
[=10=].onChange({ [] row in
row.value = row.value
})
}
}
PushRow
选项需要符合 Equatable
。因此,假设您的 Priority
class 符合 Equatable
,您可以使用 follow 函数,该函数将通用可等式类型作为参数来创建 PushRow
.
func createPushRow<T: Equatable>(type: T.Type, options: [T]) {
self.form +++ Section(label)
<<< PushRow<T>(String(typeId)) {
[=10=].title = label.lowercased()
[=10=].selectorTitle = "Pick " + label.lowercased()
[=10=].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
}
}
我有不同的功能来创建不同类型的 PushRow。 它还包括字符串类型和自定义类型。如何将这些函数合并为一个函数,该函数接受用于创建 PushRow
的通用参数fileprivate func createPushRow1() {
form +++ Section(label)
<<< PushRow<String>(String(typeId)) {
[=10=].title = label.lowercased()
[=10=].selectorTitle = "Pick " + label.lowercased()
[=10=].options = optionList
}.onChange({ [unowned self] row in
row.value = row.value
})
}
fileprivate func createPushRow2() {
self.form +++ Section(label)
<<< PushRow<Priority>(String(typeId)) {
[=10=].title = label.lowercased()
[=10=].selectorTitle = "Pick " + label.lowercased()
[=10=].options = priorityList
[=10=].displayValueFor = {
guard let priority = [=10=] else { return nil }
return priority.name
}
[=10=].onChange({ [] row in
row.value = row.value
})
}
}
PushRow
选项需要符合 Equatable
。因此,假设您的 Priority
class 符合 Equatable
,您可以使用 follow 函数,该函数将通用可等式类型作为参数来创建 PushRow
.
func createPushRow<T: Equatable>(type: T.Type, options: [T]) {
self.form +++ Section(label)
<<< PushRow<T>(String(typeId)) {
[=10=].title = label.lowercased()
[=10=].selectorTitle = "Pick " + label.lowercased()
[=10=].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
}
}