ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 201016 - TIL
    TIL/2021 2020. 10. 17. 00:37

    오늘은 Optional, Function, Closure에 대해서 복습을 했다.

    오늘 복습하며 느낀 것은 개념을 다 알지만 String과 Array의 Method 활용법이 바로바로 떠오르지 않는다는 것이었다.

     

    예를 들어 문자열의 단어들을 배열로 나누는 법

    let string = "Hi my name is BeePeach"
    
    string.components(separatedBy: " ")

     

     

    그리고 거꾸로 배열을 문자열로 연결하는 법

    let string = "Hi my name is BeePeach"
    
    string.components(separatedBy: " ").joined(separator: "#")

    이런 게 떠오르지 않았다ㅠㅠ 분명 공부했던 건데....

    문제점을 알았으니 다시 복습하면 된다! String과 Collection 부분을 다시 복습해야겠다.

     

     

     

     

     

     

    공부중 생긴 의문

     

    let name = "Beepeach"
    let age = 1
    let height = 130.6
    
    let indroduce = String(format: "안녕하세요? 제 이름은 %@입니다. 나이는 %d살이고 키는 %fcm입니다. ", name, height, age)
    
    let indroduce1 = String(format: "안녕하세요? 제 이름은 %@입니다. 나이는 %d살이고 키는 %fcm입니다. ", name, age, height)
    
    print(indroduce)
    print(indroduce1)

    format specifier를 공부 중에 순서를 지키지 않으면 오류가 발생할 것이라고 생각하고 적은 코드였는데

    오류가 발생 안되고 같은 결과가 출력됐다.

     

     

    let indroduce1 = String(format: "안녕하세요? 제 이름은 %@입니다. 나이는 %d살이고 키는 %fcm입니다. ", age, name, height)

    이렇게 작성하면 오류가 나는 것을 보아 실수와 정수만 잘못 입력해도 바꿔주는 거 같다.

     

     

     

     

     

    생각해봐야 할 것

    String() Init으로 매번 포맷을 지정해주는 게 길어 보였다.

    그래서 extension으로 interpolation을 이용해서 쉽게 해 봐야지~라는 생각으로 만들어 봤는데...

    import UIKit
    
    let doubleNum = 12.345678
    
    let formatNum = String(format: "%2.f", doubleNum)
    print(formatNum)
    
    extension String.StringInterpolation {
        mutating func appendInterpolation(_ value: Double, _ num: Int) {
            let str = String(format: "%.\(num)f", value)
            appendInterpolation("\(str)")
        }
    }
    print("\(doubleNum, 2)")
    print("\(doubleNum, 5)")
    

     

     

    이걸 이용해서 예전에 만들어둔 계산기의 msg부분을 줄여보고 싶었다.

    @IBAction func calc(_ sender: Any) {
            
            
            
            guard let leftStr = leftField.text, let leftNum = Double(leftStr) else {
                //경고창
                presentAlert(title: "⚠️", message: "왼쪽 칸에 숫자를 입력해주세요.")
                leftField.becomeFirstResponder()
                return
            }
            
            guard let rightStr = rightField.text, let rightNum = Double(rightStr)  else {
                //경고창
                presentAlert(title: "⚠️", message: "오른쪽 칸에 숫자를 입력해주세요.")
                rightField.becomeFirstResponder()
                return
            }
            
            guard let op = centerField.text else {
                return
            }
            
            resetNumber()
            
            let msg = "\(String(format: "%.0f", leftNum)) \(op) \(String(format: "%.0f", rightNum)) = \(String(format: "%.1f", calcArithmetic(a: leftNum, op: op, b: rightNum)))"
            
            
            presentAlert(title: "결과", message: msg)
            
            
            
            
        }

    여기 msg를

     

     

    let msg = "\(leftNum, 0) \(op) \(rightNum, 0) = \(calcArithmetic(a: leftNum, op: op, b: rightNum), 1)"
            
            
    presentAlert(title: "결과", message: msg)

    이렇게 줄일 수 있었지만....  좋은 방법인가에 대해서는 의문이 든다.

    굳이 이렇게?라는 생각이 나는 건 기분 탓인가..?

    728x90

    'TIL > 2021' 카테고리의 다른 글

    201019 - TIL  (0) 2020.10.20
    201018 - TIL  (1) 2020.10.18
    201014 - TIL  (0) 2020.10.15
    201013 - TIL  (0) 2020.10.14
    201012 - TIL  (0) 2020.10.13
Designed by Tistory.