특정 프로퍼티의 값이 변경되면 반응을 하는 구문입니다. willSet : 프로퍼티의 값이 변경되기 직전에 호출되는 옵저버 didSet : 프로퍼티의 값이 변경된 직후에 호출되는 옵저버 var : [ = ] { willSet [ () ] { } } var : [ = ] { didSet [ () ] { } } 대괄호의 경우에는 생략을 해도 됩니다. struct Job { var income: Int = 0 { willSet { if income == 0 { print("월급이 \(newValue)로 책정이 되었습니다") } else { print("월급이 \(income)에서 \(newValue)으로 변경되었습니다") } } didSet { if income > oldValue { if oldValue !=..
날짜에 대해서 설정하는 방법을 정리하고자 합니다. DateFormatter의 인스턴스는 NSDate 객체의 문자열 표현을 만들고 날짜와 시간의 텍스트 표현을 NSDate 객체로 변환합니다. DateFomrmatter methods string(from:) DateFormetter에서 날짜 설정을 통해서 지정한 날짜 문자열로 표현합니다. import Foundation var dateFormat = DateFormatter() dateFormat.locale = Locale(identifier: "en-US") dateFormat.dateStyle = .full dateFormat.timeStyle = .full var str1 = dateFormat.string(from: Date()) print(st..
42seoul에서 공부한 c, c++에서 사용해본 적이 없는 개념이었습니다. 클래스와 구조체에서 자주 사용했던 저장 프로퍼티 외에도 연산 프로퍼티라는 게 등장하였으니, 간략하게 알아보려 합니다. computed property란?? 저장 프로퍼티와 같지만, 실제 값을 저장하는 것이 아닌 다른 프로퍼티의 값을 연산 처리하여 간접적으로 값을 제공합니다. get 구문을 통해서 함수와 비슷하게 return 값을 반환하며, set 구문을 사용하여 연산 프로퍼티에 값을 할당하거나 변경하고자 할 때 사용되는 구문입니다. 실질적으로 값이 저장을 하지는 않습니다. 또한, set 구문은 생각이 가능합니다. 우선 구조를 확인하고, 코드를 통해서 알아보도록 하겠습니다. class/struct/enum 객체명 { ... var..
swift 함수는 중첩하여서 작성을 할 수 있습니다. 함수 내 작성할 수 있는 Inner functio의 수는 제한이 없지만, 많아질수록 구조가 복잡하고 유지보수가 힘든 코드가 됩니다. Inner function은 Outer function이 호출되었을 때, 생성되었다가 소멸됩니다( Life Cycle ) 말보다는 코드로 쉽게 이해를 하는 게 좋을 거 같습니다. // outer function func addNumbers(_ num1: Int, _ num2: Int) { print("Addition") // inner function func display(num1: Int, num2: Int) { print("\(num1) + \(num2) =", num1 + num2) } // calling inne..
문법에 대한 공부를 하다보니 defer 블록에 대해 나와 정리를 하고자 합니다. defer 블록이란? 함수나 메소드에서 코드의 흐름과 상관없이 가장 마지막에 실행되는 블록입니다. defer 블록 사용은 언제? 종료 시점에 맞추어서 처리해야 할 구문을 넣으면 됩니다. 각종 리소스의 처리나 해제, 연결 종료 등의 구문을 처리하는 용도로 사용됩니다. defer 블록의 특성은? 작성된 위치와 순서에 상관없이 함수가 종료되기 직전에 실행됩니다. 읽기 전에 함수의 실행이 종료될 경우 defer 블록은 실행되지 않습니다. defer 블록이 여러 번 사용되었다면, 역순으로 실행됩니다. defer 블록을 중첩해서 사용되었다면, 바깥쪽부터 실행됩니다. func Test() { defer { print("defer #1")..
Continue : 반복문 내에서 그 지점을 건너뛰고 계속 진행한다는 의미입니다. outerloop: for i in 1...3 { innerloop: for j in 1...3 { if j == 3 { continue outerloop } print("i = \(i), j = \(j)") } } 레이블이 있는 반복문으로 innerloop이 아닌 outerloop으로 보냅니다. fallthrough가 있는 switch 문 : case 값이 switch 식과 일치하지 않아도 제어는 다음 case로 진행합니다. let dayOfWeek = 4 switch dayOfWeek { case 1: print("Sunday") case 2: print("Monday") case 3: print("Tuesday") c..
Swift에서 guard는 특정 조건이 충족되지 않을 때 프로그램 제어를 범위 밖으로 옮기기 위해 명령문을 사용합니다 expression 에서 true / false 값에 따라서 동작을 하는데, if문과는 반대로 false 일 경우에 statements가 동작을 하게 됩니다 statements에서는 never return을 가진 함수를 호출하거나 Control Transfer Statements를 전송해야 한다 Control transfer statements : return, break, continue 등이 있습니다. 함수 내 guard문 사용 func checkOddEven() { var number = 24 // use of guard statement guard number % 2 == 0 el..
변수와 상수 : 타입에 대해서 명시를 해줘야 합니다. // 상수 let 이름: 타입 = 값 // 변수 var 이름: 타입 = 값 // 타입 추론 var happyNewYear = 0101 타입 추론 : int 라는 타입으로 명시하지 않아도 숫자임을 언어에서 추론하게 됩니다. 그렇다면 타입은 무엇이 있는지 설명하겠습니다. Int, Uint Float, Double String, Character Int : 기본적으로 64비트 정수를 사용되지만, Int32 와 Int64 등으로 더 명확하게 표현할 수 있습니다. Uint : 64비트 양수의 정수로 C에서 사용한 unsigned int와 동일합니다. Float : A single-precision, floating-point value type Double :..