【发布时间】:2019-04-30 21:55:00
【问题描述】:
选项 1:
func getKeyByType<T:Decodable>(type: T.Type) -> String {
if (type == [String].self){
return "storageKey"
}
return "nothing"
}
选项 2:
func getKeyByType<T:Decodable>(type: T.Type) -> String {
switch type {
case [String].self:
return "storageKey"
default:
return "nothing"
}
}
//
getKeyByType(type: [String].self)
第一种方法可以正常工作,但第二种我得到编译错误:
“[String].Type”类型的表达式模式不能匹配类型的值 'T.Type'
如何让开关与元类型一起使用?
【问题讨论】:
-
如果你真的想让
case [String].self工作,你可以提供一个~=的重载来比较两个Any.Type值,例如func ~= (pattern: Any.Type, value: Any.Type) -> Bool { return pattern == value }。那么如果SE-0090 发生过,你可以说case [String]:)
标签: swift