2015-12-16 4 views
3

Я хотел бы добавить расширение на словаре, который относится только к словарю со строками в качестве ключей и массивом NSManagedObject в качестве значенияКак ограничить расширение словаря с Струнным ключом и массив NSManagedObjects, как Value

В идеале было бы выглядеть следующим образом:

extension Dictionary where Key : StringLiteralConvertible, Value: [NSManagedObject] { 

или

extension Dictionary where Key : StringLiteralConvertible, Value: SequenceType<NSManagedObject> { 

Если я только установить Value : NSManagedObject, он работает. Но нет, если это массив этого. Кто-нибудь знает обходное решение для этого?

+0

Существует дискуссия и обходной путь в http://stackoverflow.com/questions/32815718/extending-dictionary-with-key-and-value-constraints – spassas

ответ

0

EDIT:

Хорошо, этот удачливый работал на детской площадке в Xcode 7.2 ...

extension Dictionary where Key: StringLiteralConvertible, Value: ArrayLiteralConvertible, Value.Element: NSManagedObject { 
    func hello() -> String { 
     return "World" 
    } 
} 


let a: [String: [NSManagedObject]] = [:] 
a.hello() 

ORIGINAL:

Я думаю, что вы могли бы попробовать специализироваться Array типа в Swift: Array<NSManagedObject>

Таким образом, результат будет выглядеть следующим образом:

extension Dictionary where Key: StringLiteralConvertible, Value: Array<NSManagedObject> { 
+0

К сожалению , это также приведет к ошибке: 'type 'Value', ограниченный не-протокольным типом 'Array '' – spassas

+0

Да, я тоже пробовал это и давал ту же ошибку – hakonbogen