Xcode7抛出:
select t.*
, ttop.id as firstid
from #test t
JOIN #test ttop on ttop.id = (SELECT TOP 1 ID
FROM #TEST tbest
WHERE t.list = tbest.list order by priority)
and ttop.id = t.id -- this does the trick!
我在这里缺少什么?
Cannot subscript a value of type 'Dictionary<Key,Value>' with an index of type 'T'
尝试将其设为extension Dictionary where Key: StringLiteralConvertible, Value: AnyObject {
func boolOr<T:StringLiteralConvertible>(fall: Bool, key: T) -> Bool {
return (self[key] as? Bool) ?? fall
}
}
也不起作用(我使用String
而不是String
得到同样的错误)
T
答案 0 :(得分:2)
正如评论中已经提到的,类型约束
在boolOr()
方法上没有必要:
extension Dictionary where Key: StringLiteralConvertible, Value: AnyObject {
func boolOr(fall: Bool, key: Key) -> Bool {
return (self[key] as? Bool) ?? fall
}
}
因为密钥类型已在扩展声明中受到限制。
您的代码无法编译,因为<T:StringLiteralConvertible>
引入了一个与本地类型无关的本地类型占位符T
Key
字典的类型。
但实际上我不明白你为什么要对它施加约束 密钥类型:
extension Dictionary where Value: AnyObject {
func boolOr(fall: Bool, key: Key) -> Bool {
return (self[key] as? Bool) ?? fall
}
}