gpt4 book ai didi

swift - 如何使用通用参数类型创建 PushRow 函数

转载 作者:搜寻专家 更新时间:2023-11-01 06:55:09 26 4
gpt4 key购买 nike

我有不同的函数来创建不同类型的 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 结构符合 EquatableCustomStringConvertible

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
}
}

关于swift - 如何使用通用参数类型创建 PushRow 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53954815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com