所以我有一个 typealias 元组
public typealias MyTuple<T> = (key: T, value: String)
Run Code Online (Sandbox Code Playgroud)
在我的 ViewController 中,我想声明一个具有通用数据类型的 MyTuple 数组,因为我仍然不知道 key 的类型。然而,由此看来,Swift中不可能有泛型类型变量。还有其他解决方法如下,但我不喜欢其中任何一个。有人有更好的想法吗?
class ViewController: UIViewController {
var array1 = [MyTuple<T>]() // compile error of course
var array2 = [MyTuple<Any>]() // no point as I'd use `Any` for MyTuple
func getArray<T>(array: Array<MyTuple<T>>) -> Array<MyTuple<T>> {
return array // not a good approach
}
}
Run Code Online (Sandbox Code Playgroud) 我已经发布了一个问题但不清楚我想要什么。正如@AlainT 所建议的,我提交了一份新文件。
我有一个 typealias 元组
public typealias MyTuple<T> = (key: T, value: String)
Run Code Online (Sandbox Code Playgroud)
一个协议:
public protocol VCADelegate: class {
associatedtype T
func didSelectData(_ selectedData: MyTuple<T>)
}
Run Code Online (Sandbox Code Playgroud)
带有表视图的视图控制器 (VCA)
class VCA<T>: UIViewController, UITableViewDelegate, UITableViewDataSource {
var dataList = [MyTuple<T>]()
weak var delegate: VCADelegate? // Error: can only be used as a generic constraint
// ...
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
delegate?.didSelectData(dataList[indexPath.row])
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个视图控制器 (VCB) 中,我创建了一个 VCA 并传递了一个 dataList
func callVCA() {
let vcA = …Run Code Online (Sandbox Code Playgroud)