我想对Optional< Dictionary< String,AnyObject>>进行扩展。我怎么写这个?
我期待它像
extension Optional where
Wrapped : Dictionary,
Key : String,
Value : AnyObject { ... }
但它希望Dictionary直接获取参数,即使这有效,我希望它会抱怨String不是一个协议。所以我试试
extension Optional where Wrapped : Dictionary<String, AnyObject> { ... }
但在此抱怨type 'Wrapped' constrained to non-protocol type 'Dictionary<String, AnyObject>'
答案 0 :(得分:5)
使用点语法访问Wrapped的Key和Value。
extension Optional where Wrapped: DictionaryLiteralConvertible, Wrapped.Key: StringLiteralConvertible, Wrapped.Value: AnyObject {
func doSomething() {
print("did it")
}
}
现在你可以这样称呼:
Optional(["asdf":123]).doSomething()
但不是这样:
Optional([123:123]).doSomething()