iOS
-
[Swift] 타입캐스팅(type casting)iOS/Swift 2022. 8. 24. 23:53
💡 스위프트의 타입 캐스팅은 C++과 다르다는 걸 이해하고 넘어가자!!! 이걸 모르고 공부하면 헷갈린다 C++의 형변환(타입 캐스팅) - 묵시적 형변환 컴파일 할 때 자동으로 형변환 된다. float a = 3.14; int b; b = a; // 3 - 명시적 형변환 개발자가 직접 타입을 명시해준다. float a = 3.14; int b; b = (int)a; // 3 Swift의 형변환(이니셜라이저) var a: Double = 3.14 var b: Int = Int(a) print(b) // 3 Swift는 기존 값(a)을 전달인자로 받는 이니셔라이저를 통해 새로운 인스턴스를 생성한다. 💡 스위프트의 타입 캐스팅 인스턴스의 타입 확인 자신을 다른 타입의 인스턴스인양 행세하기 1️⃣ 인스턴스의 타입..
-
[Swift] 상속 (Inheritance)iOS/Swift 2022. 8. 22. 23:08
💡 클래스는 메서드나 프로퍼티 등을 다른 클래스로부터 상속받을 수 있다! 자식 클래스: 상속받은 클래스 부모 클래스: 자식에게 특성을 물려준 클래스 기반 클래스: 다른 클래스로부터 상속을 받지 않은 클래스 클래스 상속 시 부모 클래스의 프로퍼티, 메서드 등을 재정의하거나, 자신의 기능을 추가할 수 있다 재정의(override) 부모 클래스로부터 물려받은 특성을 그대로 사용하지 않고 변경하여 사용하는 것 ⭐️ 새로운 정의 앞에 override 키워드 사용 Q. 재정의를 하고 난 뒤에 부모 클래스의 특성을 사용하고 싶다면? ⭐️ super 키워드 1️⃣ 프로퍼티 재정의 - 프로퍼티를 재정의하는 것은 프로퍼티 자체가 아니라, 프로퍼티의 접근자, 설정자, 감시자 등을 재정의하는 것이다 - 부모 클래스에서 읽기 ..
-
[Swift] 서브스크립트(subscript)iOS/Swift 2022. 8. 20. 23:45
서브스크립트 클래스, 구조체, 열거형 등의 타입의 요소에 접근하는 문법이다 별도의 설정자(setter)와 접근자(getter) 메서드를 구현하지 않아도 인덱스를 통해 값을 설정하거나 가져올 수 있다 서브스크립트 중복정의: 여러 개 구현 O -> 값의 타입을 유추해서 적잘한 서브스크립트를 선택하여 실행한다 매개변수의 타입과 반환 타입에 제한이 없다 ⭐️ subscript 키워드 - 읽고 쓰기 - 읽기 전용 서브스크립트 정의 문법 // 읽고 쓰기 subscript(index: Int) -> Int { get { } set(newValue) { } } // 읽기 전용 subscript(index: Int) -> Int { } 예시 코드 // School 클래스 서브스크립트 구현 struct Student { ..
-
[Swift] Dice game에 Auto layout 추가하기iOS/project 2022. 8. 15. 19:19
💡 오늘 배울 내용 : Auto layout, constraints, stack view Challenge 1 화면을 돌리면 배경이 짤리는 문제 pin constraints 배경에 pin constraints 속성을 추가해주었다 alignment constraints 주사위 이미지에 alignment constraints 속성을 추가해주었다 화면을 돌려도 짤리지 않는 것을 확인할 수 있다 만약 화면을 돌렸을 때 위의 사진처럼 사이즈가 유지된다면 View - Content Mode를 Aspect Fit에서 Redraw로 변경해주면 된다! Challenge 2 Stack View를 활용해보자 영역을 3개로 나누어서 Constraints를 이용하고자 할 때 Stack View를 사용할 수 있다! Top, Mi..
-
[Swift] 모나드(Monad)iOS/Swift 2022. 8. 15. 15:45
모나드 값을 어딘가에 포장하는 개념에 대한 이해에서 출발한다 함수객체(Functor)와 모나드(Monad)는 특정 기능이 아닌 디자인 패턴 혹은 자료구조라고 할 수 있다 모나드가 갖춰야하는 조건 3가지 타입을 인자로 받는 타입 특정 타입의 값을 포장한 것을 반환하는 함수가 존재 포장된 값을 변환하여 같은 형태로 포장하는 함수가 존재 모나드의 대표적인 예시: 🔥 옵셔널 - 값이 있을지 없을지 모르는 상태를 박스에 담아두는 것 옵셔널은 (1) Wrapped 타입을 인자로 받는 제네릭 타입이다 (2) Optional, init(2) 처럼 다른 타입의 값을 갖는 상태의 컨텍스트를 생성할 수 있다 (3) 옵셔널은 컨테이너와 값을 갖기 때문에 맵 함수를 사용할 수 있다 모나드를 이해하기 위해 필요한 개념 1. 컨텍..
-
[Swift] 맵, 필터, 리듀스(map, filter, reduce)iOS/Swift 2022. 8. 15. 14:57
고차 함수 매개변수로 함수를 갖는 함수이며, 맵, 필터, 리듀스는 고차함수의 일종이다. 맵(map) - 컨테이너 내부의 기존 데이터를 변형해서 새로운 컨테이너를 생성한다(컨테이너에 포장해서 반환) - for-in 반복문과 비슷하게 사용할 수 있지만 성능에서 차이가 존재한다 // MARK: map // 컨테이너 내부의 기존 데이터를 변형해서 새로운 컨테이너 생성(컨테이너에 포장해서 반환) // ex) // 배열 생성 let numbers: [Int] = [0, 1, 2, 3, 4] var doubleNumbers: [Int] var strings: [String] // MARK: for-in 구문 사용 doubleNumbers = [Int]() strings = [String]() for number in..
-
[Swift] 옵셔널 체이닝(Optional Chaining)iOS/Swift 2022. 8. 11. 20:51
옵셔널 체이닝이란? 💡 옵셔널이 중첩되어 있을 때 유용하게 사용할 수 있는 옵셔널 내부 요소의 프로퍼티이다 - 중첩된 옵셔널 중 하나라도 값이 존재하지 않는다면 nil을 반환한다 // ============== ============== class Room { var RoomNum: Int init(RoomNum: Int) { self.RoomNum = RoomNum } } class Building { var name: String var room: Room? init(name: String) { self.name = name } } struct Address { var building: Building? var city: String init(city: String)..
-
[Swift] 클로저iOS/Swift 2022. 8. 9. 22:55
💡 클로저 1. 이름이 없는 함수 2. 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것 코드를 유용하게 작성하기 위해 사용한다. 클로저 표현 방법 클로저가 함수의 모습이 아닌 하나의 블록 모습으로 표현될 수 있는 방법 { (매개변수들) -> 반환타입 in 실행코드 } ** in이라는 키워드는 정의부와 실행부를 분리하기 위해서 사용한다 함수와 클로저 비교 ** 함수는 클로저의 한 형태이다 let names: [String] = ["Bonny", "John", "Ham"] // 배열 값을 정렬하는 sorted(by: ) 메서드를 통해 함수와 클로저 비교해보기 // 함수 func backwards(first: String, second: String) -> Bool { return first > seco..