Swift 中泛型变量的解决方法

Law*_*iet 4 generics variables tuples type-alias 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)

zou*_*oul 5

我认为解决这个问题的通常方法是将 \xe2\x80\x9cpush\xe2\x80\x9d 类型决策置于依赖链的较高位置,传递给视图控制器:

\n\n
class ViewController<T>: UIViewController {\n    var array: [MyTuple<T>]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是有道理的,因为您可能会将控制器视为 \xe2\x80\x9cfoo 控制器\xe2\x80\x9d,其中 \xe2\x80\x9cfoo\xe2\x80\x9d 是 的具体值T。(\xe2\x80\x9cpet 控制器\xe2\x80\x9d、\xe2\x80\x9cproduct 控制器、\xe2\x80\x9d 等)但是,当然您可以\xe2\x80\x99t 创建数组,直到您知道具体类型。

\n

  • 我考虑过通用视图控制器,但如果我想稍后扩展我的 ViewController,那不是不可能吗? (2认同)