![](/img/trans.png)
[英]How to use generic type in function parameter from generic class in Swift
[英]How to create PushRow function with generic parameter type
我有不同的功能來創建具有不同類型的PushRow。 它同時包括字符串類型和自定義類型。 如何將這些功能合並為一個接受通用參數以創建PushRow的功能
fileprivate func createPushRow1() {
form +++ Section(label)
<<< PushRow<String>(String(typeId)) {
$0.title = label.lowercased()
$0.selectorTitle = "Pick " + label.lowercased()
$0.options = optionList
}.onChange({ [unowned self] row in
row.value = row.value
})
}
fileprivate func createPushRow2() {
self.form +++ Section(label)
<<< PushRow<Priority>(String(typeId)) {
$0.title = label.lowercased()
$0.selectorTitle = "Pick " + label.lowercased()
$0.options = priorityList
$0.displayValueFor = {
guard let priority = $0 else { return nil }
return priority.name
}
$0.onChange({ [] row in
row.value = row.value
})
}
}
PushRow
選項要求符合Equatable
。 因此,假設您的Priority
類符合Equatable
,則可以使用follow函數,該函數將通用的equatable類型作為參數來創建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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.