전체 글 127

[swift] 소수점 둘째 자리 까지 나타내기 (feat. round(), String)

소수점 둘째 자리, 셋째 자리, ... n째 짜리 까지 나타내고 싶을때는 10의 제곱수와 round 메소드를 이용하거나 String(struct)을 이용하는 방법이 있다. 먼저 10의 제곱과 round를 이용하여 바꾸는 방법은, 1. 10의 n제곱을 먼저 곱한다. 2. 1을 round() 로 감싸서 정수로 만든다. 3. 2를 10의 n 제곱으로 나눈다. let x = 1.2974605 // 둘째 자리까지만(1.29) 표시하기 let twoDecimal = round(x * 100) / 100 // x * 100 는 129.74605 // round(x * 100) 는 129 // round(x * 100) / 100 은 1.29 // 셋째 자리까지만(1.297) 표시하기 let threeDecimal =..

swift & iOS/swift 2022.01.20

[swift] 중첩 함수 (nested functions)

https://docs.swift.org/swift-book/LanguageGuide/Functions.html#ID178 스위프트 공식문서의 Functions 챕터에도 나오지만 흔히 말하는 함수는 대부분 글로벌 함수일 것이다. 어디서나 호출할 수 있는 함수이다(global scope). 중첩 함수는 이름처럼 함수 안에 작성하는 함수를 말한다. 아래처럼 chooseStepFunction 함수(글로벌 함수) 안에 작성된 함수들이 모두 중첩 함수 nested function이다. chooseStepFunction 함수는 chooseStepFunction() 처럼 호출할 수 있지만 중첩 함수들은 chooseStepFunction 함수 안에서만 호출할 수 있다. // 출처: https://docs.swift.o..

swift & iOS/swift 2022.01.19

[swift] 디자인 패턴1 - MVC

디자인 패턴은 프로그래밍 언어에 상관없이 적용되는 거지만 나는 지금 스위프트를 공부하고 있으니까... xcode에서 처음 프로젝트를 생성하면 viewController와 main.storyboard 파일이 있는데 (swiftUI 말고 storyboard 선택한 경우) 맨 처음 ios 개발을 하나씩 배우다 보면 viewController 파일 하나에 모든 코드들을 몽땅 작성하게 된다. 화면에 보여줄 데이터, 그 데이터를 조작하거나 가져오는 부분 등.. 처음엔 간단히 작성하는 것이기 때문에 viewController 파일 하나에 작성해도 되지만 프로젝트 크기가 커지면 작성해야 하는 코드가 많아지고 다뤄야 하는 화면들도 많아지게 된다. 그래서 디자인 패턴을 적용하여 프로젝트를 관리하기 쉽게, 수정하기 쉽게, ..

parameter vs argument

(이건 프로그래밍 언어 전반적으로 사용되는 용어지만.... ) parameter: variable in the function definition ( 함수 내부에서 사용되는 변수) argument: input at function call (함수 호출할 때 전달하는 값) 매개변수, 인자라고도 부르는데 영어로 된 걸 한글로 바꾸면 더 헷갈려서 그냥 영단어를 사용하는 게 나은 것 같다 func add(x: Int, y: Int) { print(x + y) // x, y는 파라미터. 파라미터 x, 파라미터 y 라고 부름 } add(x: 10, y: 10) // 여기서 argument로 각각 10을 전달

swift & iOS/swift 2022.01.16

[swift] 클로저 closure (feat. 함수)

스위프트의 함수는 '1급 객체'이다. 1급 객체의 특징은 다음과 같다. - 변수에 저장할 수 있음 - argument로 전달할 수 있음 - 리턴값으로 사용할 수 있음 제목은 클로저라고 써놓고는 왜 함수를 얘기하냐면 함수도 결국 클로저였기 때문이다. 스위프트 공식 문서에 아래처럼 나와있다. 출처: https://docs.swift.org/swift-book/LanguageGuide/Closures.html Global and nested functions, as introduced in Functions, are actually special cases of closures. Closures take one of three forms: Global functions are closures that have..

swift & iOS/swift 2022.01.16

[swift] 함수에 함수를 전달하거나 함수를 리턴하거나

swift에서 함수는 1급 객체(first class object)이기 때문에 함수를 변수에 담거나, 다른 함수에 argument로 전달하거나 리턴값으로 사용할 수 있다. (자바스크립트도 마찬가지...) 그래서 아래 같은 것도 할 수 있다.. func x(n: Float) { print("x: \(n)") } func add(num: Int, printFloat: (Float) -> Void) { let n = Float(num) printFloat(n) return } add(num: 7, printFloat: x) 또는 함수를 리턴할 때에는... func test() -> (String) -> String { // String을 받고 String을 리턴하는 함수를 리턴 // ... } 화살표가 여러 ..

swift & iOS/swift 2022.01.16

[swift] 함수에 여러 개의 argument 넣기(...)

스위프트 공식문서의 functions에서 variadic parameters 부분을 참고하였다. https://docs.swift.org/swift-book/LanguageGuide/Functions.html variadic 라는 단어를 네이버 사전에서 찾아보았는데 이 단어 자체가 '임의의 여러 개의 argument를 취하는(taking many arguments)' 뜻인 것 같다. var...로 시작하는게 vary, various, variety 계열의 의미이겠거니 추측은 했지만. https://en.dict.naver.com/#/search?query=Variadic&range=all 스위프트 함수에서 argument를 많이 전달할 수도 있다. 몇 개 전달할 지는 모르겠는데 한 개는 아니고 하여튼 여..

swift & iOS/swift 2022.01.16

[swift] guard...else...

https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html 출처는 위 swift 공식문서의 Control Flow에서 Early Exit 부분이다. 아래의 설명과 예시는 모두 위 주소에서 가져온 것이다. guard는 if문에서 else 부분에 해당한다. if문은 조건이 참이면 if 부분이, 거짓이면 else 부분이 실행되는데 guard는 그 반대라고 볼 수 있다. guard 조건이 거짓이면 guard문의 else {...} 부분이 실행되고 참이면 else {...} 다음으로 나오는 부분이 실행된다. 공식문서에서 나오기를 if {...} else {...} 보다 guard를 사용하는 것이 더 읽기 편하다고 한다. (가독성 좋음) 자바스크립트 할때도 ..

swift & iOS/swift 2022.01.16

[swift] switch문 case에 조건 달기 (where 키워드)

https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID134 swift 공식문서에서 switch where 키워드 관련 부분 swift의 switch 문에서는 아래처럼 case에 tuple을 사용할 수도 있고 변수에 튜플 값을 바인딩 할 수도 있고(x, y에 튜플 값이 하나씩 들어감) where 키워드를 사용하여 case 안에서 또 다른 조건을 추가할 수 있다. // 출처: https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID134 let yetAnotherPoint = (1, -1) switch yetAnotherPoint { case let(x,y) where x ==..

swift & iOS/swift 2022.01.16

[Swift] 정수 나누기 (9 나누기 10을 했는데 0이 나오다)

자바스크립트를 하던 나는 0.9를 얻기 위해 당연하게도 9 / 10 을 했다. 자바스크립트라면 분명 0.9 였을텐데 스위프트에서는 0이 나왔다. Int 나누기 Int는 Int 라는 것이다. 아 그러면 9 / 10을 Float로 감싸면 되겠다^^ 싶었지만 여전히 0이 나왔다. 9 / 10이 0이었는데 0을 Float로 감싸봤자 0.0이 나오는 것이다. 그래서 9 / 10 으로 0.9를 얻으려면 각 숫자를 Float로 만들고 나서 나눠야 한다. print(Float(9) / Float(10)) // 0.9 // 아니면 애초에 Float 변수들을 선언하고 그걸 사용해도 된다 let a: Float = 9 let b: Float = 10 print(a / b) 만약 내가 Int를 얻고 싶으면 재료로 써먹는 숫자..

swift & iOS/swift 2022.01.14