Próbuję napisać ogólną funkcję wymagającą operacji zmiany bitów. Otrzymuję zachowanie, którego nie rozumiem. Oto prosta funkcja, która demonstruje problem.Przesuwanie bitów w szybkiej ogólnej funkcji
func testBytes<T: IntegerType>(bytesIn: [UInt8], inout dataOut: T){
let outputSize = sizeof(T)
var temp: T = 0
dataOut = 0
temp = bytesIn[0] as T
temp = temp << 1
}
Jeśli to zrobię, to ostatnia linia daje mi błąd w kodzie x "T nie jest zamienne do Int".
mogę zmienić ostatni wiersz temp = temp << (1 as T)
I wtedy błąd na tej linii zmienia się na „T nie jest wymienialny na Uint8”
ani jeden z tych komunikatów o błędach dla mnie sensu w tym kontekście . Czy jest coś, co mogę zrobić, aby umożliwić przenoszenie bitów na typ ogólny?
Przygotowałem podobną odpowiedź, ale byłeś szybszy :-). To, co zrobiłem, aby rozwiązać drugi problem, to dodanie do protokołu 'init (_ val: UInt8)'. Wszystkie typy (podpisane i niepodpisane) mają taki konstruktor, więc można wykonać konwersję z 'temp = T (bytesIn [0])' i potrzebna jest tylko jedna implementacja. –
Świetna poprawka! Zaktualizowano odpowiedź tą zmianą. –
Wielkie dzięki. Prawdopodobnie przedłożę wkrótce nowe pytanie dotyczące problemu, ponieważ generics może nie być elegancką odpowiedzią, której szukałem. – dustincarr