programing

Swift에서 문자열을 CGFloat로 변환

copyandpastes 2021. 1. 16. 10:58
반응형

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. 에서 갈 수있는 안전한 방법 그래서 StringCGFloat있다가 :

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)

당신은 주조한다 stringdouble다음에서 주조 doubleCGFloat이것을 시도하자 :

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

반응형