Swift
![[Swift] 배열 안전하게 조회하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrPfPe%2FbtrX4j8HCjE%2FMBjk22Ig9ahIqRnB8JYfuK%2Fimg.jpg)
[Swift] 배열 안전하게 조회하기
💥 배열 안전하게 조회하기 🌟 배열을 안전하게 조회해야되는 이유? Array: Out of range 런타임 error가 발생이되면 프로그램이 바로 죽기 때문에 안전하게 조회를 해야된다. 따라서, 우리는 만약 out of range이면 nil을 내뱉는 서브 스크르비트 메소드를 만들어주면 된다. extension Array { public subscript (safe index: Int) -> Element? { return indices ~= index ? self[index] : nil // iOS 9 or later } } let list = [1, 2, 3] list[safe: 4] // nil list[safe: 2] // 3 🤔 ‘~=’ 연산자는 뭘까?.. 대상이 특정 범위에 속하는 지 범위를 ..
![[Swift] Optional](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkMBj3%2FbtrX2W0KCl6%2FrXUJ64bgHMkZTbQoCKvTwK%2Fimg.jpg)
[Swift] Optional
💥 옵서널(Optional) @frozen enum Optional nil을 사용할 수 있는 타입과 그렇지 못한 타입을 구분하기 위한 수단이다. nil을 사용할 수 있는 타입을 Optional Type이라고 한다. Optional Type은 타입 옆에 ?를 붙힌다. enum 타입이며, case로는 Optional.some(Wrapped) 과 Optional.none 가 있다. → 즉, 에러가 났지만 바로 앱을 중단시키는 것이 아닌, nil을 내 뱉을거다.(기회를 한번 더 주는 것!) 어떠한 상황에서 필요한 지 예를 통해서 알아보자. 아래와 같은 경우는 우리가 예상하는대로이다. let people = ["kim": 1, "lim": 2, "hyun": 3] let name = people["kim"] //..
![[Swift] 메타타입](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNEkhu%2FbtrX2ZCOwxV%2Fc8K5CrzhHutEoKUm4IiK9k%2Fimg.jpg)
[Swift] 메타타입
HTML 삽입 미리보기할 수 없는 소스 💥 메타 타입 타입의 타입을 뜻한다. 우리가 알고 있는 타입은 메타타입의 인스턴스이다* 위의 내용을 표로 정리해보면 아래와 같다. 메타타입 String.type 메타타입의 인스턴스(타입) String.self 타입의 인스턴스 “Miro” - 예를 통해서 표의 내용을 이해해보자. 아래는 Class를 정의하고 해당 클래스의 인스턴스를 생성해주는 코드이다. class Human { var: name = "Miro" } let miro: Human = Human() miro 상수와 같이 Human 타입이라고 선언했을 경우, Human 타입의 instance를 넣어준다. 그렇다면 아래와 같은 코드일 경우, 메타타입의 instance(Human.self)를 넣어주어야됨을 알 ..
![[Swift] Generic](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrgDp6%2FbtrX17uAab0%2FQOdVcPBG3RGXgg4XzeJCeK%2Fimg.jpg)
[Swift] Generic
💥 Generic(제네릭) 타입에 의존하지 않는 범용 코드를 작성할 때 사용된다. 🌟 제네릭 함수 만약 내가 인자로 들어오는 int값을 서로 swap하는 함수를 만든다고 가정해보자. 그러면 아래와 같이 함수 코드를 작성할 있다. func swapTwoInts(_ a: inout Int, _ b: inout Int) { let tempA = a a = b b = tempA } 그리고, 만약 내가 String값을 서로 swap하는 함수를 만든다고 가정을 한다면? func swapTwoStrings(_ a: inout String, _ b: inout String) { let tempA = a a = b b = tempA } 즉, 위와 같이 type 별로 같은 기능을 하는 함수를 만들어줘야된다. 그러나, 아래..
![[Swift] map 삼형제(map, compactMap, flatMap)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYQ2VC%2FbtrX2Yw7kDp%2FYN5Ik0sjJh6hksNhN9Gz50%2Fimg.jpg)
[Swift] map 삼형제(map, compactMap, flatMap)
map 아래와 같이 각 요소에 대한 값을 변경할 때 사용이 된다. 배열의 형태로 반환이된다. func map(_ transform: (String) throws -> T) rethrows -> [T] [Swift] - 고차함수(Map,Filter,Reduce), allSatisfy, forEach compactMap map을 해주는 동시에 nil을 제거하고 옵셔널 바인딩을 해준다. func compactMap(_ transform: (Int?) throws -> ElementOfResult?) rethrows -> [ElementOfResult] flatMap map을 해주는 동시에 nil을 제거하고 옵셔널 바인딩을 해준다. 중첩된 배열을 제거한다. 1차원 배열로 flatten하게 해준다. func fl..
![[Swift] Protocol](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrHuSq%2FbtrX30gQWHk%2FKg7qw1MnXexbrvVydP6651%2Fimg.jpg)
[Swift] Protocol
💥 프로토콜(Protocol) 기능에 적합한 메서드, 프로퍼티 등에 대한 청사진이다. 클래스, 구조체, 열거형이 채택을 한다. 약속 채택, 준수, 실체화 🌟 프로토콜 정의 구체적인 구현은 채택한 type이 해준다. protocol SoccerTeam { var striker: String { get set } var midfielder: String { get set } var defender: String { get set } var goalKeeper: String { get set } func play(sports: String) -> String { } } 🫧 프로토콜 프로퍼티 선언 연산 프러퍼티 & 저장 프러퍼티 둘 다 가능하다. 연산 프러퍼티 ⇒ 무조건 var로 선언 저장 프러피티 ⇒ get,..