Estou tentando converter este Obj-C
código em Swift
código, mas não sei qual deve ser o equivalente a este código.
#define DEGREES_TO_RADIANS(degrees)((M_PI * degrees)/180)
Eu pesquisei e encontrei isso
Mas eu não entendo como converter isso em Swift no meu caso?
Respostas:
Xcode 11 • Swift 5.1 ou posterior
Parque infantil
Se você quiser fazer com que o inteiro binário retorne um tipo de ponto flutuante em vez de sempre retornar um CGFloat, você pode fazer um método genérico em vez de uma propriedade computada:
fonte
CGFloat
?Não é exatamente o que você pediu, mas no Swift 3 / iOS 10, você pode usar o tipo de medição e fazer a conversão sem saber a fórmula!
fonte
A Apple fornece estas funções GLKit para conversão:
fonte
Compila em Swift 3 . Ainda mantenha todos os valores, faça todos os cálculos em radianos com CGFloats ..., mas torne o código mais legível com as constantes em graus. Por exemplo: 90 ° O sinal ° fará magicamente a conversão de graus em radianos.
Como configurar isso:
Defina e use um operador postfix para o sinal ° . Este operador fará a conversão de graus em radianos. Este exemplo é para Ints, estenda-os também para os tipos Float, se for necessário.
Alguns exemplos de uso:
Aviso!
É muito fácil usar esta conversão duas vezes (em um valor já em radianos por engano), você obterá um número muito pequeno como resultado, e aparentemente o ângulo resultante será sempre zero ... NÃO use ° no mesmo valor duas vezes (não converta duas vezes) !!:
fonte
IntegerInitializable
protocolo é inútil. Int já está em conformidade comExpressibleByIntegerLiteral
public extension FixedWidthInteger { postfix static func °<T: FloatingPoint>(lhs: Self) -> T { T(lhs) * .pi / 180 } }
let angle: CGFloat = 45°
. Mas não é necessário onde se espera umCGFloat
ou qualquerFloatingPoint
tipoCGAffineTransform(rotationAngle: 45°)
Além disso, para converter radianos da frente em graus (se alguém encontrar isso no Google):
fonte
Você não está mais limitado a caracteres ASCII ao criar nomes de variáveis, então que tal usar π (alt-p):
Exemplo de uso:
fonte
Swift 4.2
Você pode escrever funções genéricas globais:
Exemplo:
No caso de você não querer estender todos os seus tipos flutuantes como este
fonte
return .pi * degrees / 180
?T
éFloatingPoint
tipo e 180 éInt
tipo. No Swift, você não pode fazer cálculos em tipos diferentes.Eu usaria o mesmo princípio @ t1ser mencionado acima, mas criaria uma extensão de
CGFloat
para facilitar o uso de decimais para o grau também (para que você pudesse ter 23,4 graus, por exemplo):Usá-lo também seria muito fácil (principalmente porque eu pessoalmente não sabia como digitar ° 😜 - caso você também não saiba, é a propósito
option+shift+8
):Ou para usar o inicializador:
fonte
rápido 2,3
fonte