개발 창고/iOS

[SwiftUI] How to convert from String to CGFloat

로이제로 2023. 11. 23. 22:00
반응형

How to convert from String to CGFloat

 개발 중에 자주 사용 되는 형변환은 문자열의 숫자형 변환 또는 숫자의 문자열형 변환일 겁니다. 일반적으로 형변환은 아래와 같이 실행하면 형변환이 됩니다.

형변환 예 #1

piDouble : 3.14159265359

 형 변환 시 잘못된 경우 nil이 반환되어야 하므로 nil이 허용되어야 합니다. 때문에 형 변환에 Double 뒤에 "?"가 붙어야 하고, 출력 시에도 piDouble값이 nil인지 체크되어야 합니다.


CGFloat란?

CGFloat란 무엇일까요? 일반적으로 개발언어에서는 float와 double 또는 둘 중 한 개의 형태만 제공하는데, SwiftUI에서는 CGFloat라는 녀석을 제공합니다.

Float : 실수형 단정밀도 32비트 부동 소수형

Double : 실수형 배정밀도 64비트 부동 소수형

CGFloat : 플랫폼에 따라 32비트는 float, 64비트에서는 double로 사용되는 실수형. CPU 아키텍처에 따라 다름


Invalid Case

// invalid case #1
var piNum:CGFloat = str as CGFloat

Error : Cannot convert value of type 'String' to type 'CGFloat' in coercion

// invalid case #2
var piNum:CGFloat = CGFloat(from:str)

Error : Argument type 'String' does not conform to expected type 'Decoder'


방법 #1

형변환 방볍 #1

piNum01 : 3.14159265359

여기에서 주의할 점은 doubleValue부분에 floatValue를 사용하면 값이 잘못 변환될 수도 있다는 점입니다.

만약 아래와 같은 순서대로 출력해본다고 가정하면

print((str as NSString))
print((str as NSString).floatValue)
print(CGFloat((str as NSString).floatValue))

값이 floatValue가 씌어질 때 반올림 된 이후 CGFloat 형변환이 되면서 잘못된 값으로 변환되는 것을 보실 수 있습니다.

형변환 결과

floatValue에서 CGFloat로 형변환 되면서 값이 이상해짐


방법 #2

형변환 방법 #2

piNum02 : 3.14159265359

전체 테스트 소스

전체 테스트 소스
테스트 전체 결과

 

반응형