-
201016 - TILTIL/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