2014-12-06 20 views
5

Mój kod jest bardzo prosty.Nie można wywołać metody typu w klasie zgodnej z protokołem

Mój protokół:

protocol BaseEntity 
{ 
    class func getInstance(sourceObject: [NSObject : AnyObject], context: AnyObject!) -> BaseEntity 
    init() 
} 

Następnie w innej klasie mam tej metody:

private func convertJSONDictionaryIntoModel(jsonDictionary : [NSObject : AnyObject], mapClass: BaseEntity.Type) -> BaseEntity 
{ 
    let object = mapClass.getInstance(jsonDictionary, context: nil) 

    return object 
} 

Mam błąd kompilatora na pierwszej linii, która brzmi „członków przypadek dostępu do wartości typ protokołu BaseEntity Typ jest niezaimplementowany "

O ile wiem, jest to możliwe w Swift.

Odpowiedz

0

Po prostu to spotkałem! Oznacza to, że język programowania Swift nie obsługuje metod klasowych w protokołach ... jeszcze. Sposób obejścia tego problemu wydaje się zależeć od konkretnej sytuacji i nie ma "powinieneś zrobić to zamiast tego". Jeśli ktokolwiek ma lepsze rozwiązanie, udostępnij je!

Jest to również w przypadku zmiennych klasowych, jednak jest hacky workaround for that.

+0

Niestety, nie mogłem znaleźć żadnego rozwiązania tego. Jedynym sposobem, w jaki jestem w stanie to zaakceptować, jest użycie generycznych, ale generyczne mają również swoje własne ograniczenia. Tego rodzaju problemy sprawiają, że naprawdę myślę, że język jest niekompletny. Ich celem było ułatwienie i wyraźniej ... zgadnij, co jeśli nie obsługują tego rodzaju rzeczy i trzeba polegać na niektórych obejściach, jak ten, który wyeksponowałeś, to jest dość mocno spieprzone. – mdonati

Powiązane problemy