首页 > 解决方案 > 在 Swift 中访问泛型参数的类型值

问题描述

我正在尝试制作一个可以将 Payload 作为参数的调度函数。Payload 可以是 Int、String 或任何其他类型。我尝试了以下方法,但在调度函数内部,payload.value 始终为 T 而不是 Int 或 String。铸造是一种选择,但我认为这就是泛型的全部意义所在。

struct Payload<T> {
    let value: T
}

func dispatch<T>(payload: Payload<T>) {
    print(payload.value) // get the value as Int, String or some other type
}

let payload = Payload<Int>(value: 100)

let payload2 = Payload<String>(value: "FOO")

dispatch(payload: payload)
dispatch(payload: payload2)

标签: swift

解决方案


正如您已经知道的那样, T 是不受约束的,因此它可以是任何类型。您唯一的选择是将值转换为您期望的类型。您可以简单地切换值:

switch payload.value {
case let value as Int:
    print("Int:", value)
case let value as String:
    print("String:", value)
default:
    print("some other type", payload.value)
}

推荐阅读