gpt4 book ai didi

ios - Swift 中的泛型选择器 View

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

我正在尝试使用 Generics 创建一个通用的 UI Picker。作为我实现的一部分,我创建了要在 UIPicker 中显示的 GenericRow 对象。但我面临一些问题。它可能是基本的,但找不到。

struct GenericRow<T> {
let type: T
let title: String
public init(type: T, title: String) {
self.type = type
self.title = title
}
}

接下来是处理 UIPickerViewDataSource 和 UIPickerViewDelegate 的 GenericDataSource。

class GenericPickerDataSource<T>: NSObject, UIPickerViewDelegate, UIPickerViewDataSource {

public var items: [GenericRow<T>]

public init(withItems items: [GenericRow<T>]) {
self.items = items
}

public func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return items.count
}

public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return items[row].title
}
}

然后,我正在创建一个管理器来处理选择器显示/隐藏功能。请注意,这也是通用的,并且对 GenericRow 类型一无所知。

class GenericPickerManager {
static func showPicker(_ dataSource: GenericPickerDataSource<Any>) {}

static func hidePicker() {}
}

示例输入:

struct State {
let identifier: String
let name: String
}

let CA = State(identifier: "CA", name: "California")
let CLT = State(identifier: "CLT", name: "Charlotte")
let IL = State(identifier: "IL", name: "Illinois")

let states = [CA, CLT, IL]

let items = states.map {
GenericRow<State>(type: $0, title: $0.name)
}

let dataSource = GenericPickerDataSource(withItems: items)

现在,当我尝试显示我类(class)的选择器时,出现错误。

GenericPickerManager.showPicker(dataSource)

Cannot convert value of type GenericPickerDataSource<State> to expected argument type GenericPickerDataSource<Any>.

如何解决这个问题?

最佳答案

Any 和泛型不能很好地协同工作。使 GenericPickerManager 也通用:

class GenericPickerManager<T> {
static func showPicker(_ dataSource: GenericPickerDataSource<T>) {}

static func hidePicker() {}
}

关于ios - Swift 中的泛型选择器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54054874/

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