고차함수 고차함수(Higher-order function)은 ‘다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수’를 뜻합니다. 스위프트의 함수(클로저)는 일급시민이기 때문에 함수의 전달인자로 전달할 수 있으며, 함수의 결과값으로 반환할 수 있습니다. 이번 파트에서는 스위프트 표준라이브러리에서 제공하는 유용한 고차함수에 대해 알아봅니다. map filter reduce map, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입(Array, Set, Dictionary 등)에 구현되어 있습니다. ------------------------------------------------------------------------ map map함수는 컨테이너 내부의 기존..
익스텐션 익스텐션(Extension) 은 스위프트의 강력한 기능 중 하나입니다. 익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가 할 수 있는 기능입니다. 기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있습니다. 스위프트의 익스텐션이 타입에 추가할 수 있는 기능 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티 타입 메서드 / 인스턴스 메서드 이니셜라이저 서브스크립트 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없습니다. 클래스의 상속과 익스텐션을 비교해보겠습니다. 이 둘은 비슷해보이지만 실제 성격은 많..
프로토콜 프로토콜(Protocol) 은 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 구조체, 클래스, 열거형은 프로토콜을 채택(Adopted) 해서 특정 기능을 수행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있습니다. 어떤 프로토콜의 요구사항을 모두 따르는 타입은 그 프로토콜을 준수한다(Conform) 고 표현합니다. 타입에서 프로토콜의 요구사항을 충족시키려면 프로토콜이 제시하는 청사진의 기능을 모두 구현해야 합니다. 즉, 프로토콜은 기능을 정의하고 제시 할 뿐이지 스스로 기능을 구현하지는 않습니다. 자바의 인터페이스와 유사함 정의 문법 protocol 키워드를 사용하여 정의합니다. protocol 프로토콜 이름 { 정의부 } //프로토콜 구현 proto..
https://github.com/JeaSungLEE/iOSInterviewquestions GitHub - JeaSungLEE/iOSInterviewquestions: 👨🏻💻👩🏻💻iOS 면접에 나올 질문들 총 정리 👨🏻💻👩🏻💻iOS 면접에 나올 질문들 총 정리 . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub. github.com
assert와 guard 애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인하고 빠르게 처리할 수 있습니다. Assertion assert(_:_:file:line:) 함수를 사용합니다. assert 함수는 디버깅 모드에서만 동작합니다. 배포하는 애플리케이션에서는 제외됩니다. 주로 디버깅 중 조건의 검증을 위하여 사용합니다. 내가 예상 했던 조건들이 확실히 맞는가 검증하기 위해 사용함 var someInt: Int = 0 // 검증 조건에 부합하므로 지나갑니다 assert(someInt == 0, "someInt != 0") // 맞으면 지나치고 아니면 someInt != 0 메세지 출력 someInt = 1 //assert(someInt == 0)..
스위프트의 타입캐스팅은 인스턴스의 타입을 확인 하는 용도 또는 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인 하는 용도로 사용합니다. is, as를 사용합니다. let someInt: Int = 100 let someDouble: Double = Double(someInt) 기존 다른 언어에서 타입 케이팅을 이런식으로 했었음 이건 실질적으로 스위프트에서 타입 케스팅이 아님 이건 더블타입에 인스턴스를 하나더 생성 해주는 것임 주로 스위프트에서 타입 케스팅은 클레스 인스턴스에서 사용 많이함 타입 캐스팅 //타입 캐스팅 예제를 위한 클래스 정의 class Person { var name: String = "" func breath() { print("숨을 쉽니다") } } cla..
옵셔널 체이닝 우리가 구조체, 클레스 선언해줄때 구조체 안에 구조체인스턴스 또 구조체 안에 구조체 인스턴스 이렇게 연결 연결 되서 들어올수가 있음 그런데 이프러퍼티 자체가 옵셔널인 경우에는 이것이 nil인지 체크 해야 하는경우가 있는데 이럴때 옵셔널 체이닝이 유용하게 사용됨 옵셔널 체이닝은 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하게 활용할 수 있습니다. 매 번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있습니다. class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } class Apartment { var b..
인스턴스 생성과 소멸 이니셜라이저와 디이니셜라이저 init, deinit //MARK: - 프로퍼티 기본값 // 스위프트의 모든 인스턴스는 초기화와 동시에 // 모든 프로퍼티에 유효한 값이 할당되어 있어야 합니다 // 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됩니다 class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "nick" } let jason: PersonA = PersonA() jason.name = "jason" jason.age = 30 jason.nickName = "j" //MARK: - 이니셜라이저 // 프로퍼티..