[Swift] 23. assert / guard
2020. 11. 29. 20:08
iOS/Swift
Assertion assert(_:_file:line:) 함수를 사용한다. assert 함수는 디버깅 모드에서만 동작한다. 배포하는 애플리케이션에서는 제외된다. 예상했던 조건의 검증을 위하여 사용한다. 다음과 같이 사용해볼 수 있다. var someInt: Int = 0 assert(someInt == 0, "someInt != 0") // 확인을 위해 someInt 의 값을 1로 변경 someInt = 1 assert(someInt == 0, "someInt != 0") ========== 출력 결과 ========== Assertion failed: someInt != 0: file __lldb_expr_33/study23.playground, line 8 검증에 실패했고 실패한 메시지가 나타나고 f..
스위프트는 어떻게 동작할까?
2020. 11. 25. 18:43
iOS/Swift
스위프트가 어떻게 컴파일 되서 동작하는지 궁금해서 이것저것 찾아보았다. 스위프트는 뛰어난 고성능 LLVM 컴파일러를 사용하여 최신 하드웨어를 최대한 활용할 수 있도록 최적화된 기본 코드로 변환된다. LLVM? low-level virtual machine 언어에 가상 기계를 생성, 가상 기계가 언어에 독립적인 최적화를 실행 언어와 구조로부터 독립적이며, 언어 모듈과 시스템을 위한 코드 생성 부의 사이에 위치한다고 한다. 소스 코드 -> 프론트엔드 -> LLVM Optimizer -> 백엔드 -> 기계어 프 라고 설명이 되어있지만 당장은 무슨소린지..ㅎㅎ 더 이해가 필요해보인다 그래서 아래 위키 참고 😅 그래서 다양한 블로그를 통해 알아보긴 했지만 당장 완벽하게 이해하기는 어렵게 느껴진다. 😄 더 공부해서..
[Swift] 22. 타입 캐스팅 (type casting)
2020. 11. 25. 18:27
iOS/Swift
스위프트의 타입캐스팅 타입 캐스팅은 인스턴스의 타입을 확인하는 용도 이다. 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도 is , as 연산자를 사용한다. 정리해서, 인스턴스의 타입을 확인하거나 인스턴스 타입의 슈퍼클래스 또는 서브클래스 타입처럼 다루기 위해 사용! 다음 클래스를 통해 예를 들어서 확인해보려고 한다. class Person { var name: String = "" func breath() { print("하트 비트") } } // Person 클래스 상속 class Student: Person { var school: String = "" func goToSchool() { print("학교 가자") } } // Student 클래스 상속 clas..
[Swift] 21. 옵셔널 체이닝과 nil 병합
2020. 11. 18. 19:18
iOS/Swift
이전에 옵셔널 체이닝에 대해서 다루었던 것이 기억난다. 옵셔널 체이닝은 옵셔널 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있다. 매번 nil 을 확인하지 않아도 최종적으로 원하는 값이 있는지 없는지 확인할 수 있다. 이렇게 말하면 이해가 잘 되지 않으니 예제를 통해 알아봐야겠다. 옵셔널 체이닝 | Optional Chaining 우선, 두 개의 클래스를 만들었다. class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String..
[Swift] 20. 인스턴스 생성 및 소멸 (init / deinit)
2020. 11. 11. 18:16
iOS/Swift
인스턴스를 생성하는 이니셜라이저와 인스턴스가 소멸될 때 호출되는 디이니셜라이저에 대해서 공부하려고 한다. 클래스나 구조체 등을 만들때 프로퍼티의 값을 할당해주었던 것을 생각해보자. 저장 프로퍼티에 값을 할당하지 않으면 에러가 발생한다. 그래서 인스턴스를 생성함과 동시에 초기값을 따로 할당해서 사용했다. 그런데 초기화와 동시에 프로퍼티의 값을 할당하고 싶을 때 이니셜라이저를 사용할 수 있다. 프로퍼티 초기값 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어야 한다. 프로퍼티에 미리 기본 값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 된다. 다음 예를 통해 확인할 수 있다. class PersonPropertyInit { // 모든 저장 프로퍼티에 기본값 할당 va..
[Swift] 19. 상속(Inheritance)
2020. 11. 9. 20:20
iOS/Swift
스위프트 상속(Inheritance) 상속은 클래스, 프로토콜 등에서 가능하다. 열거형, 구조체는 상속이 불가능하다. 스위프트의 클래스는 단일 상속으로, 다중 상속을 지원하지 않는다. 프로토콜의 경우 여러개를 채택할 수 있다. 상속하는 클래스는 하위클래스(subclass), 상속받은 클래스는 슈퍼클래스(superclass) 로 알려져있다. 이번에는 클래스의 상속에 대해서 공부할 예정이다. 클래스에서 상속은 다음과 같이 사용할 수 있다. class 이름: 상속받을 클래스 이름 { 구현부 } 클래스를 정의한 후 변수나 상수에 타입을 정해줄 때 처럼 상속을 해줄 수 있다. 예를 들어, 상속할 상위 클래스를 만들어 보았다. class Person { var name: String = "" func selfInt..
[Swift] 18. 프로퍼티 (Property) - 추가적인 보완 필요
2020. 11. 5. 21:06
iOS/Swift
프로퍼티(Property) 지난 번에도 프로퍼티에 대해서 간단하게 이해하고 넘어간 것 같은데 이번에는 자세하게 공부해보려고 한다. 프로퍼티는 직역해보면 재산, 소유물 이라는 의미로 번역할 수 있다. 보통은 속성이란 단어로 대체하는데 여기에서 말하는 프로퍼티는 클래스, 구조체, 열거형 등의 객체 인스턴스가 그 내부에 가지고 있는 객체의 상태에 관한 정보를 말한다. 즉, 프로퍼티는 속성 값에 접근하는 방법을 말한다. 따라서, 프로퍼티는 다음과 같이 사용할 수 있다. 프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다. 열거형 내부에는 연산 프로퍼티만 구현할 수 있다. 연산 프로퍼티는 var 로만 선언할 수 있다. 연산 프로퍼티를 읽기 전용으로는 구현할 수 있지만, 쓰기 전용으로는 구현할 수 없다. 읽..
[Swift] 17. 클로저(closure) 고급
2020. 11. 3. 16:12
iOS/Swift
클로저를 다양하게 사용하는 방법에 대해서 공부했다. 후행클로저, 반환타입 생략, 단축 인자 이름, 암시적 반환 표현 의 다양한 모습으로 클로저를 표현할 수 있다. 일반적으로 클로저는 다음과 같이 사용할 수 있다. // 클로저 기본 표현 func calcluate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int { return method(a, b) } 지난 번에 클로저 기본에 대해서 공부할 때 함수의 인자로 받아 사용했던 기억이 있다. 이번에는 클로저의 기본 문법에서 다양한 모습으로 바꿔서 사용해보려고 한다. 후행 클로저 함수의 매개변수 마지막으로 전달되는 클로저는 후행 클로저(trailing closure)로 함수 밖에 구현할 수 있다. 클로저가 함수의 마지막 ..