swift - 在 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)
解决方案
正如您已经知道的那样, 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)
}
推荐阅读
- mongodb - 如何通过 MongoDB 中的嵌套字段连接到集合
- javascript - mongodb - 使用 COLLSCAN 而不是索引的 $lookup 管道
- python - 无论我尝试什么,BeautifulSoup4 都找不到表
- javascript - 即使在地图移动期间也保持标记居中
- spring - 过滤通量反应器中的重复对象
- function - 为什么这两个表达式不等价,一个给出错误?
- python - 在python中绘制多个数字
- c# - 如何从作为服务器的 SslStream 获取请求的目标主机
- c++ - 如何让我的程序正确地将数据传递给我的数组?(家庭作业)
- csv - 简化查询 Neo4j