Preciso armazenar um valor como a Float
, mas os dados de origem são CGFloat
:
let myFloat : Float = myRect.origin.x
mas isso resulta no erro do compilador: 'NSNumber' não é do subtipo 'Float'
Então, se eu lançar explicitamente assim:
let myFloat : Float = myRect.origin.x as Float
mas isso, por sua vez, resulta no erro do compilador: 'Não é possível converter o tipo da expressão' Float 'para' Float ''
Qual é a maneira correta de fazer isso e satisfazer o compilador, por favor?
Respostas:
Você pode usar o
Float()
inicializador:fonte
float
vez deFloat
, então parece esse tipo / palavra-chave em vez de um nome de variável.Se você for tão preguiçoso quanto eu, em Extensions.swift defina o seguinte:
Então você pode fazer:
fonte
Normalmente, a melhor solução é manter o tipo e o uso
CGFloat
, mesmo em Swift. Isso porqueCGFloat
tem tamanhos diferentes em máquinas de 32 bits e 64 bits.A palavra-chave
as
pode ser usada apenas para conversão dinâmica (para subclasses), por exemploNo entanto,
Double
,Int
,Float
etc não são subclasses do outro, portanto, "cast" você tem que criar uma nova instância, por exemplo,fonte
as
para converter um tipo genérico em um tipo concreto. Por exemplo, se você tinha uma função que aceita um tipo genérico em conformidade comBinaryInteger
, você pode convertê-la paraInt
usandoas?
ouas!
.