Как ограничить расширение словаря с помощью String Key и массива NSManagedObjects в качестве значения

Я хотел бы добавить расширение словаря, которое применяется только к словарю со строками в качестве ключей и массивом NSManagedObject в качестве значения.

В идеале это выглядело бы так:

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

or

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

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


person bogen    schedule 16.12.2015    source источник
comment
Существует обсуждение и обходной путь в stackoverflow.com/questions/32815718/   -  person spassas    schedule 16.12.2015


Ответы (1)


ИЗМЕНИТЬ:

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

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


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

ОРИГИНАЛ:

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

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

extension Dictionary where Key: StringLiteralConvertible, Value: Array<NSManagedObject> {
person Lachezar    schedule 16.12.2015
comment
К сожалению, это также приведет к ошибке: type 'Value' constrained to non-protocol type 'Array<NSManagedObject>' - person spassas; 16.12.2015