iOS/Swift
-
[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..
-
[Swift] 접근 제어iOS/Swift 2022. 8. 5. 14:10
💡 객체 지향 프로그래밍 데이터를 추상화시켜 상태와 동작을 가지는 하나의 객체로 묶어서 문제를 해결하는 프로그래밍 방법이다. * 추상화: 공통적인 속성이나 기능을 묶어 이름을 붙이는 것 (클래스를 정의하는 일) 절차적 프로그래밍은 알고리즘을 중요시 하지만, 객체 지향적 프로그래밍은 데이터를 중요시한다. 따라서 문제에서 필요한 데이터를 먼저 설계하는데, 데이터를 나타낼 때 사용하는 도구가 클래스이다. 클래스에는 데이터와 함수(알고리즘)가 포함되기 때문에 데이터와 알고리즘이 분리되어 있지 않다는 점이 큰 특징이다. 객체 지향 프로그래밍의 장점: - 소프트웨어 개발의 유용성 - 유지 및 보수의 효율성 캡슐화 데이터와 알고리즘을 하나의 단위(클래스)로 묶는 것으로, 캡슐화를 총해 데이터에 대한 불필요한 접근을 ..
-
[Swift] 인스턴스(instance)iOS/Swift 2022. 8. 3. 23:45
💡 학습할 내용 기본값 할당 이니셜라이저 옵셔널 실패 가능한 이니셜라이저 디이니셜라이저 인스턴스가 생성이 되기 전 프로퍼티 값들이 초기화가 되어있어야 합니다. 만약 초기값이 없는 클래스를 선언하면 어떻게 될까요? class StudentB { var name: String var age: Int var major: String class StudentB에 초기값이 없다는 컴파일 오류가 발생하게 됩니다. 💡 프로퍼티 값을 초기화하는 방법에 대해 알아봅시다. 1. 기본값 할당 모든 저장 프로퍼티에 기본값을 할당하는 방법입니다. 따로 이니셜라이저를 통해 초기값을 할당하지 않아도 됩니다. 예시) class StudentA { var name: String = " " //이름 var age: Int = 0 //나..
-
[Swift] 프로퍼티(property)iOS/Swift 2022. 8. 2. 21:53
💡 프로퍼티: 클래스, 구조체, 열거형 등에 관련된 값 프로퍼티의 종류 저장 프로퍼티 연산 프로퍼티 타입 프로퍼티 인스턴스의 변수 또는 상수 특정 연산을 실행한 결과값 특정 타입에 사용되는 프로퍼티 + 프로퍼티 감시자 저장 프로퍼티 - 클래스 또는 구조체의 인스턴스와 연관된 값을 저장한다 - 기본값과 초기값 지정O 💡 클래스의 경우 초기값을 지정해주지 않으면 따로 정의해줘야 한다 💡 옵셔널 저장 프로퍼티를 통해 값을 초기값을 넣어주지 않고 나중에 값이 있을 경우 할당할 수도 있다 // ============ ============ // 구조체 struct CoordinatePoint { // 저장 프로퍼티 var x: Int var y: Int } // 인스턴스 생성 let yeon..
-
[Swift] 구조체(struct)와 클래스(class)iOS/Swift 2022. 8. 2. 20:44
구조체와 클래스의 사용 목적 - 데이터를 용도에 맞게 묶어서 표현하고자 할 때 - 새로운 사용자 정의 데이터 타입을 만들어 주는 것 구조체 클래스 값 타입 참조 타입 인스턴스를 let으로 선언 시 내부 프로퍼티 값 변경X 인스턴스를 let으로 선언 시 내부 프로퍼티 값 변경O 상속 불가 상속 가능 타입 캐스팅 불가 타입 캐스팅 가능 디이니셜라이저X 디이니셜라이저O (메모리 소멸) 기본적으로 저장 프로퍼티를 매개변수로 갖는 이니셜라이저O 프로퍼티 기본값을 지정하지 않으면 이니셜라이저 따로 정의 / 사용자 정의 이니셜라이저 호출 구조체 예시 // 구조체 정의 struct BasicInformation { var name: String var age: Int } // 구조체 인스턴스 생성 및 사용 var ye..
-
[Swift] 옵셔널(Optional)iOS/Swift 2022. 7. 26. 14:37
옵셔널 - 값이 있을 수도 있고, 없을 수도 있다 - 옵셔널은 nil의 가능성을 문서화하지 않아도 명시적으로 표현할 수 있기 때문에 사용한다 let optionalConstant: Int? = nil let someConstant: Int = nil 컴파일 오류! 'nil' cannot initialize specified type 'Int' 옵셔널 선언 방법 let optionalValue: Optional = nil let optionalValue2: Int? = nil 옵셔널(?) 암시적 추출 옵셔널(!) nil 할당 가능 기존 변수처럼 사용 불가 기존 변수처럼 사용 가능(ex. 연산...) 옵셔널 값 추출 방법 1. 옵셔널 바인딩(Optional Binding) 2. 강제 추출(Force Unwr..