小编Law*_*iet的帖子

Swift 中泛型变量的解决方法

所以我有一个 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)

generics variables tuples type-alias swift

4
推荐指数
1
解决办法
1万
查看次数

通用视图控制器不适用于委托和扩展

我已经发布了一个问题但不清楚我想要什么。正如@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)

generics delegates ios type-alias swift

2
推荐指数
1
解决办法
585
查看次数

标签 统计

generics ×2

swift ×2

type-alias ×2

delegates ×1

ios ×1

tuples ×1

variables ×1