2015-06-01 4 views
3

Я делаю что-то неправильно или Swift должен быть написан с постоянными преобразованиями? Например, я хочу определить NSRect, чтобы нарисовать круг, и я уже определил NSPoint, который будет его центром, также у меня есть радиус Float, который будет определять ширину и высоту, но его следует умножить на шкалу Int раньше, поэтому я делаю это так:Преобразование типов для параметров NSRect

let objectRect = NSRect(x: center.x - radius*scale ... 

я получаю предупреждение, что я не могу умножить Int на Float. Хорошо, теперь это выглядит так:

let objectRect = NSRect(x: center.x - radius*Float(scale) ... 

Теперь эта часть хорошо, но еще одно предупреждение говорит, что Float не может быть вычтена из CGFloat. Другое преобразование:

let objectRect = NSRect(x: Float(center.x) - radius*Float(scale) ... 

Выглядит ужасно уже, но к началу торту последних предупреждений состояния, NSRect не принимает Float, так что мне нужно, чтобы преобразовать его в два раз.

ответ

1

Сделайте это один раз. И, как заметил ниже использования CGFloat сразу:

let objectRect = NSRect(x: CGFloat(center.x) - radius* CGFloat(scale) ... 

Coming из скриптовых языков Свифт система типа может раздражать. Однако вы привыкли к этому.

+1

Хотя это затмит ошибки на устройстве OPs (это, по-видимому, 64 бит), это вызовет такую ​​же проблему на 32-битном устройстве. Короче говоря, используйте CGFloat. –

+0

Я, я использую 'CGFLoat' почти везде. Изменит его. –

+0

Но почему они не делают это неявно? Некоторые концептуальные причины? – RomaValcer

Смежные вопросы