Swift에서 문자열을 CGFloat로 변환
저는 Swift를 처음 사용하는데 어떻게 문자열을 CGFloat로 변환 할 수 있습니까?
나는 시도했다 :
var fl: CGFloat = str as CGFloat
var fl: CGFloat = (CGFloat)str
var fl: CGFloat = CGFloat(str)
모두 작동하지 않았다
이를위한 안전한 방법을 원한다면 다음과 같은 가능성이 있습니다.
let str = "32.4"
if let n = NSNumberFormatter().numberFromString(str) {
let f = CGFloat(n)
}
str
"bob"으로 변경 하면 float로 변환되지 않고 다른 대부분의 답변은 0.0으로 바뀝니다.
Swift 3.0의 경우 다음과 같이합니다.
let str = "32.4"
guard let n = NSNumberFormatter().number(from: str) else { return }
// Use `n` here
Swift 4에서는 NSNumberFormatter
이름이 NumberFormatter
다음과 같이 변경되었습니다 .
let str = "32.4"
guard let n = NumberFormatter().number(from: str) else { return }
Swift 2.0 Double
부터이 유형에는 String
. 에서 갈 수있는 안전한 방법 그래서 String
에 CGFloat
있다가 :
let string = "1.23456"
var cgFloat: CGFloat?
if let doubleValue = Double(string) {
cgFloat = CGFloat(doubleValue)
}
// cgFloat will be nil if string cannot be converted
이 작업을 자주 수행해야하는 경우 다음에 확장 메서드를 추가 할 수 있습니다 String
.
extension String {
func CGFloatValue() -> CGFloat? {
guard let doubleValue = Double(self) else {
return nil
}
return CGFloat(doubleValue)
}
}
CGFloat?
작업이 실패 할 수 있으므로 a를 반환해야합니다 .
이것은 작동합니다 :
let str = "3.141592654"
let fl = CGFloat((str as NSString).floatValue)
당신은 주조한다 string
에 double
다음에서 주조 double
에 CGFloat
이것을 시도하자 :
let fl: CGFloat = CGFloat((str as NSString).doubleValue)
Swift 3.0에서
if let n = NumberFormatter().number(from: string) {
let f = CGFloat(n)
}
또는 문자열이 모든 요구 사항을 충족한다고 확신하는 경우
let n = CGFloat(NumberFormatter().number(from: string)!)
다른 답변은 정확하지만 결과에는 소수점이 표시됩니다.
예를 들면 :
let str = "3.141592654"
let foo = CGFloat((str as NSString).floatValue)
결과:
3.14159274101257
문자열에서 적절한 값을 얻으려면 다음을 시도하십시오.
let str : String = "3.141592654"
let secStr : NSString = str as NSString
let flt : CGFloat = CGFloat(secStr.doubleValue)
결과:
3.141592654
CGFloat에 init를 추가하는 확장을 만들 수 있습니다.
extension CGFloat {
init?(string: String) {
guard let number = NumberFormatter().number(from: string) else {
return nil
}
self.init(number.floatValue)
}
}
그렇게 사용하십시오 let x = CGFloat(xString)
Swift 3.1에서
if let n = NumberFormatter().number(from: string) {
let fl = CGFloat(n)
}
또는:
let fl = CGFloat((str as NSString).floatValue))
이것은 일종의 해결 방법이지만 NSString으로 캐스팅 한 다음 float 값을 얻은 다음 해당 값에서 CGFloat를 초기화 할 수 있습니다. 예:
let str = "1.02345332"
let foo = CGFloat((str as NSString).floatValue)
Good question. There is not in fact any pure Swift API for converting a string that represents a CGFloat into a CGFloat. The only string-represented number that pure Swift lets you convert to a number is an integer. You'll have to use some other approach from some other library - for example, start with Foundation's NSString or C's (Darwin's) strtod
.
Simple one line solution:
let pi = CGFloat(Double("3.14") ?? 0)
ReferenceURL : https://stackoverflow.com/questions/27595799/convert-string-to-cgfloat-in-swift
'programing' 카테고리의 다른 글
F #에서 파일을 일련의 줄로 읽는 방법 (0) | 2021.01.16 |
---|---|
PHP에서 날짜별로 파일 정렬 (0) | 2021.01.16 |
Cordova 빌드 iOS 오류 : 'path / to / myApp.xcarchive'경로에서 아카이브를 찾을 수 없습니다. (0) | 2021.01.16 |
확인 대화 상자를 만드는 Angular 2 쉬운 방법 (0) | 2021.01.16 |
노드 오류 : SyntaxError : 예기치 않은 토큰 가져 오기 (0) | 2021.01.15 |