2014-09-26 19 views
5

Próbowałem zrobić prosty układ UIView matematyki w szybki i starał się następujący wiersz kodu ...Jaki jest najlepszy sposób na matematykę z CGFloats w szybkim?

var offset: CGFloat = (bounds.width/2.0) - ((sortedSymptoms.count * bounds.height)/2.0) 

i mam następujący błąd z kompilatora:

cannot invoke '-' with an argument list of type '(($T6), ($T17))' 
     var offset: CGFloat = (bounds.width/2.0) - ((sortedSymptoms.count * bounds.height)/2.0) 
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  

Kompilator błąd ISN To wszystko jest pomocne, ale wygląda na to, że istnieje konflikt typów między Double, Int i CGFloat jakiegoś rodzaju. Udało mi się stworzyć linię do kompilacji przez posypanie jej w niektórych wyraźnych kreacjach CGFloats, ale nie mogę uwierzyć, że jest to właściwy sposób na zrobienie tego.

var offset: CGFloat = (bounds.width/CGFloat(2.0)) - ((CGFloat(sortedSymptoms.count) * bounds.height)/CGFloat(2.0)) 

Jaka jest właściwa droga?

Odpowiedz

7

Jest to znany problem w Swift, a zespół programistów pracuje nad poprawieniem problemu w szczególności wokół CGFloat. Ale w tej chwili tak, tak to piszesz.

Niektóre nawiązanie z devforums (które mogą sprawić, że szczęśliwy lub smutny, ale przynajmniej z grubsza wyjaśnia aktualny stan): https://devforums.apple.com/message/1026028#1026028

Należy pamiętać, że głównym problemem jest to, że dosłowne 2.0 nie zmuszać do CGFloat, co prawdopodobnie powinno. Ale count prawdopodobnie zawsze będzie wymagało odlewu z zamiarem. Nie zawsze można bezpiecznie konwertować pomiędzy typami liczbowymi, a Swift celowo zmusza do rozważenia za każdym razem, gdy wykonujesz tego rodzaju rzuty. Ale powinno być możliwe ustalenie, czy dosłowna konwersja jest bezpieczna podczas kompilacji, więc powinna być możliwa do naprawienia.

+0

Dzięki za link do devforums, tak, to jest paskudne, ale ma sens. Mam nadzieję, że wymyślą eleganckie rozwiązanie i mam nadzieję, że nie będziemy musieli czekać na kolejne WWDC, zanim będziemy mogli zacząć z niego korzystać. –

Powiązane problemy