- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有不同的函数来创建不同类型的 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
}
}
关于swift - 如何使用通用参数类型创建 PushRow 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53954815/
如何动态创建 PushRow 并从 alamofire 函数传递值。这是我的 alamofire 函数,我想用 alamofire 响应创建 pushRow nw.getJsonData(api: A
我有不同的函数来创建不同类型的 PushRow。它还包括字符串类型和自定义类型。如何将这些函数合并为一个接受用于创建 PushRow 的通用参数的函数 fileprivate func createP
这是关于图书馆的问题,Eureka . 我有一个带有多个选项(名称)的 PushRow。我还将这些选项的第一项设置为初始化时默认选择的选项。 var names = ["Jake", "Cassie"
如果我使用最新的支持 swift 4 的 Eureka pod,我就得到了答案。 https://github.com/xmartlabs/Eureka/issues/1355#issuecommen
我在使用 Eureka Form 中的自定义对象时遇到问题,我正在尝试从 Rest 服务加载对象,我正在使用 Alamofire 获取选项,我正在使用 row.options.append 来填充数据
我使用以下代码来显示 PushRow,效果非常好: (){ $0.title = "Sound" $0.options = manager.objects(Sound.self) $0.s
我正在使用 Eureka 进行设置 VC,但在从 PushRow 推送 newVC 时遇到问题。 请注意,我不使用 Storyboard 我的设置相对简单,我的 newVC 是一个简单的 UIView
我正在使用 SplitViewController 并在详细信息页面(设置为“定义上下文”)上,用户可以在导航栏中选择“+”,然后我使用 segue 将下一个 View Controller “模态地
我是一名优秀的程序员,十分优秀!