Я пытаюсь преобразовать этот Obj-C
код в Swift
код, но не знаю, каким должен быть эквивалент этого кода?
#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)
Я погуглил и нашел это
Но я не понимаю, как это преобразовать в Swift в моем случае?
Ответы:
Xcode 11 • Swift 5.1 или новее
Игровая площадка
Если вы хотите, чтобы двоичное целое число возвращало тип с плавающей запятой вместо того, чтобы всегда возвращать CGFloat, вы можете создать общий метод вместо вычисляемого свойства:
источник
CGFloat
?Это не совсем то, что вы просили, но в Swift 3 / iOS 10 вы можете использовать тип измерения и выполнять преобразование, не зная формулы!
источник
Apple предоставляет следующие функции GLKit для преобразования:
источник
Компилируется под Swift 3 . По-прежнему сохраняйте все значения, выполняйте все вычисления в радианах с помощью CGFloats ..., но сделайте код более читабельным с помощью констант в градусах. Например: 90 ° Знак ° волшебным образом преобразует градусы в радианы.
Как это настроить:
Определите и используйте постфиксный оператор для знака ° . Этот оператор будет преобразовывать градусы в радианы. Этот пример предназначен для Ints, при необходимости расширите его также для типов Float.
Некоторые примеры использования:
Предупреждение!
Слишком просто использовать это преобразование дважды (по ошибке уже в радианах), в результате вы получите очень маленькое число, и, казалось бы, результирующий угол всегда будет равен нулю ... НЕ используйте ° для одного и того же значение дважды (не преобразовывать дважды) !!:
источник
IntegerInitializable
протокол бессмысленен. Инт уже соответствуетExpressibleByIntegerLiteral
public extension FixedWidthInteger { postfix static func °<T: FloatingPoint>(lhs: Self) -> T { T(lhs) * .pi / 180 } }
let angle: CGFloat = 45°
. Но он не нужен там, где его ожидаетCGFloat
или какой-либоFloatingPoint
тип,CGAffineTransform(rotationAngle: 45°)
Кроме того, чтобы преобразовать радианы в градусы (если кто-нибудь наткнется на это в Google):
источник
Вы больше не ограничены символами ASCII при создании имен переменных, так как насчет этого, используя π (alt-p):
Пример использования:
источник
Swift 4.2
Вы можете написать глобальные универсальные функции:
Пример:
В случае, если вы не хотите расширять все свои плавающие типы, как это
источник
return .pi * degrees / 180
?T
этоFloatingPoint
тип, а 180 -Int
тип. В swift нельзя производить расчеты по разным типам.Я бы использовал тот же принцип @ t1ser, упомянутый выше, но создал бы расширение,
CGFloat
чтобы упростить использование десятичных знаков для степени (например, у вас может быть 23,4 градуса):Использовать это тоже было бы довольно просто (в основном потому, что я лично не знал, как набирать ° 😜 - если вы тоже этого не сделали, это
option+shift+8
кстати):Или использовать инициализатор:
источник