오늘은 dropFirst(_:)와 removeFirst(_:)를 정리해보도록 하겠습니다. 사실 알고리즘 문제 풀다가... 스위프트는 왜 비슷한 메서드들을 정의해놨는지 궁금했습니다. 당연히 차이가 있으니깐 비슷한 것들을 따로 생성했겠죠...ㅎㅎ? (나: 제발 좀 공부해라) 알고리즘 문제를 보고 아! 이문제는 재귀 쓰자 마음먹었고... 재귀를 사용했어요. 그리고 재귀는 언제 리턴될지가 중요하잖아요. 저는 빈 배열이 될 때를 제약 조건으로 두고 재귀를 돌렸습니다. 즉 빈 배열이 나올 때까지 재귀로 들어가고 파라미터로는 배열의 첫 번째 요소를 제거한 나머지 배열을 계속 전달했어요. 여기서부터 사건의 발달 ... 배열의 첫 번째 요소를 제거한 나머지 배열을 전달하는 방법에 대해서 생각하다가 두 가지가 떠올랐어요...
스탠퍼드 대학의 강의를 학습하면서 Identifiable프로토콜을 사용하길래 궁금해진 Identifiable 프로토콜 🤔 그래서 오늘은 Identifiable 프로토콜에 대해서 살펴보겠습니다. 저는 이 친구를 처음 보았는데요. 이 프로토콜은 5.1에 구현되었다고 합니다. 한마디로 말하자면 Indentifiable프로토콜은 식별 가능하게 하는 프로토콜입니다. 이 프로토콜이 어떻게 이뤄져 있는지 살펴보겠습니다. associatedtype으로 ID가 선언되어 있습니다. 그리고 이는 Hashable을 준수합니다. Hashable프로토콜을 준수하기 때문에 hashValue를 갖게 됩니다. 이 hashValue는 각 인스턴스를 식별 가능하도록 합니다. 예를 들어서 카드 매칭 하는 게임을 만든다고 해봅시다. 카드를 ..
클래스 내 상수 프로퍼티 / 클래스 인스턴스 상수 클래스 A의 property를 상수로 선언했다. 클래스 인스턴스 one, two를 상수로 생성했다. ❌ 여기서 one의 a값을 10으로 변경해보면 에러가 발생한다. ❌ 여기서 one을 two의 참조값으로 변경해보면 에러가 발생한다. 아무것도 변경할 수 없음. 클래스 내 변수 프로퍼티 / 클래스 인스턴스 상수 클래스 A의 property를 변수로 선언했다. 클래스 인스턴스 one, two를 상수로 생성했다. ⭕️ 여기서 one의 a값을 10으로 변경해보면 잘 변경된다. ❌ 여기서 one을 two의 참조값으로 변경해보면 에러가 발생한다. 결과 클래스 내에 선언된 프로퍼티는 변수라 변경 가능하다. 하지만 참조값은 변경되지 않는다. 클래스 내 상수 프로퍼티 / ..
https://www.raywenderlich.com/762435-swift-interview-questions-and-answers 에서 본 인터뷰 질문에 내 생각을 작성해봄. 튜토리얼 1의 값은 1이고 튜토리얼 2의 값은 2다. 레퍼런스를 참조하는 것이 아니라 복사하기 때문에 1과 2를 별개로 생각해야 한다. 클래스였다면 튜토리얼1, 튜토리얼 2는 2가 될 것. 참조값이 변경되는 것을 논함. 변수면 참조값이 변할 수 있고 상수면 변할 수 없다. view2의 프로퍼티를 변경하는 건 상관없다. view2에 새로운 참조값을 넣는건 불가능. animals.sort { return $0 < $1 } animals.sort { $0 < $1 } animals.sort(by:
Result타입은 스위프트 5.0에서 발표한 내용입니다. 특히 비동기 API에서의 결과 처리에 대한 복잡함을 간단하고 명확하게 만들어주고 쉽게 에러를 핸들링할 수 있도록 해줘요. Result는 enum으로 선언되어 있으며, success와 failure로 두개의 케이스가 존재합니다. (벌써 명확함이 느껴지기 시작) Result타입은 성공인지 실패인지 나타내는 값입니다. 첫 번째 줄 우측을 보시면 where으로 조건이 선언되어 있습니다. Failure은 스위프트의 Error타입을 준수해야 합니다. 아래는 URLSession에 사용된 예시입니다. 네트워킹을 통해 데이터를 받거나 에러를 받을 수 있습니다. let task = URLSession.shared.dataTask(with: url) { data, r..
lazy프로퍼티는 직접 사용할 때까지 계산되지 않습니다. sean allen님의 예제가 잘 표현되어 있어서 참고했습니다. 잘 표현된 예제 한번 보시죠. Player구조체가 있으며 name, team, position프로퍼티가 있고 lazy프로퍼티로 introduction이 있습니다. struct Player { var name: String var team: String var position: String lazy var introduction = { return "Now entering the game: \(name), \(position) for the \(team)" }() } var jordan = Player(name: "Michael Jordan", team: "Bulls", position..
typealias는 기존에 선언되어있는 타입에 새로운 타입의 별칭을 선언해 사용하는 것입니다. 선언하는 방법은 아래와 같습니다. typealias name = existing type typealias를 사용하면 코드를 이해하기 쉽게 만들며 명확하게 해 줍니다. 라고 설명은 되어있지만 사실 typealias는 개개인마다 생각하는 게 다른 것 같아요. 어떤 개발자는 typealias를 많이 사용하며, 또 어떤 개발자는 더 복잡하게 만든다며 사용하길 꺼려하는 경우도 있습니다. 예를 들어 NetworkManager라는 클래스가 있습니다. 깃헙의 유저를 가져오는 함수가 있다고 가정합시다. class NetworkManager { let baseURL = "https://api.github.com/users/" ..
key path는 프로퍼티에 대한 read - only 접근을 제공합니다. key path를 사용하는 방법은 \ 시작으로 베이스 타입을 쓰고 프로퍼티명을 작성합니다. (Root) -> Value를 \Root.value로 사용할 수 있는 기능이다. 예를 들어서 User타입이 있고 안에는 4개의 프로퍼티가 정의되어 있다고 가정합시다. struct User { let name: String let age: Int let bestFriend: String? var canVote: Bool { age >= 18 } } 우리는 구조체의 인스턴스를 생성하고 그것을 배열에 넣을 수 있습니다. let eric = User(name: "Eric Effiong", age: 18, bestFriend: "Otis Milbur..
- Total
- Today
- Yesterday
- Animation
- leetcode
- objective-c
- 알고리즘
- rxswift
- SWIFT
- string
- swiftUI
- 딥러닝
- ARC
- 책
- wwdc
- 애니메이션
- 문자열
- Deep learning
- 독서
- stanford SwiftUI
- iOS SwiftUI
- 스위프트UI
- Algorithm
- RX
- ReactiveX
- Xcode
- swift5
- 머신러닝
- 스위프트
- objc
- 책 추천
- ios
- 책 후기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |