일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- @available
- 독후감
- Info.plist
- SWIFTUI
- Navigation
- 부트캠프
- Structures and Classes
- UIResponder
- 스타트업주니어로살아남기
- mvvm
- Codegen
- Modality
- 책후기
- contentInset
- 독서후기
- Failed to register bundle identifier
- roundingMode
- IOS
- human interface guidelines
- xcode
- Mock
- NumberFormatter
- SWIFT
- delegation
- 아이폰
- 스위프트
- 야곰아카데미
- View Life Cycle
- viewcontroller
- NotificationCenter
- Today
- Total
목록Software Engineering/Swift (21)
호댕의 iOS 개발
Swift Programming LauguageGuide를 보고 작성한 글입니다. Extensions — The Swift Programming Language (Swift 5.7) Extensions Extensions add new functionality to an existing class, structure, enumeration, or protocol type. This includes the ability to extend types for which you don’t have access to the original source code (known as retroactive modeling). Extensions docs.swift.org 📖 Extension은 뭘까? Extension은..
Array에서 값을 꺼내올 때는 .first나 .last로 꺼내올 수도 있지만 특정 인덱스를 꺼낼 때에는 Array[index], 이런 형태로 값에 접근하게 된다. 하지만 이 때 .first나 .last는 옵셔널 타입으로 만약 값이 없다면 nil이 나오게 되지만 [index]의 형태로 값을 접근했을 때 해당 인덱스에 해당하는 값이 존재하지 않을 경우 아예 fatal error가 발생하게 된다. (Fatal error: Index out of range) 즉, 값에 잘못 접근하게 될 경우 아예 앱 자체가 죽어버리는 것이다. 그럼 [index]의 형태로 값에 안전하게 접근할 방법은 없을까?? 이를 위해선 직접 Array의 extension으로 subscript를 정의해주면 된다. extension Array..
SwiftUI의 경우 관련된 대부분의 요소가 프로토콜과 구조체로 구성되어 있다. View를 만들 때 사용하는 View라는 프로퍼티도 프로토콜로 되어 있고 이를 통해 View를 정의할 때에도 대부분 구조체를 사용하게 된다. 👥 UIKit과 SwiftUI의 차이점 UIKit을 사용할 때는 대부분 이런 것들이 Class로 구현되어 있으며 사용할 때 차이점이 존재하게 된다. 1️⃣ Event-Driven VS Data-Driven UIKit의 경우 View 스스로 자신이 어떻게 변화할지 알 수 없다. 만약 특정 뷰의 색을 바꾼다고 생각했을 때 대개 이런 과정을 거칠 것이다. UIView, 버튼 객체를 만든다. 코드로 만든 경우 addSubView를 통해 View에 올린다. 버튼에서 UIView의 색이 바뀌는 로..
알고리즘 문제를 풀다가 for 문을 거꾸로 돌아야 하는 상황이 있었다. 물론 배열에서 for 문을 돈다면 배열에 .reversed()를 하여 for 문을 돌리면 됐지만 문제는 단순히 특정 범위를 돌아야 할 때였다. 나는 1부터 for문을 돌리고 싶은 것이 아니라.. 마지막 숫자부터 1까지를 돌리고 싶었다... 내가 마주한 문제는 다음과 같다. 초등학교 때(?) 배웠던 최대공약수와 최소공배수를 구하는 문제였는데 구하는 것은 간단했지만 막상 코드로 분기를 하려니... 마냥 쉽지만은 않았다. 이때 만약 m이 n으로 나뉘지 않는다면 n부터 1까지 내려가면서 나눠지는 값이 있는지 찾아야 했다. 이때 1부터 올라가면서 하게 된다면 공약수를 찾을 순 있지만 최대 공약수는 찾을 수 없는 문제가 있었다. 그렇다면 이때 ..
개발을 처음 접하다보면 거의 제일 먼저 만나는 것이 반복문이다. Swift에서도 While, repeat-while, for, forEach가 반복문으로 존재한다. 오늘은 이런 반복문 중에서 for-in과 forEach의 차이에 대해 살펴 보고자 한다. 성능상 차이 일단 둘의 성능 차이는 거의 없다고 볼 수 있다. 실제로 Swift Github에 들어가서 확인해보면 forEach의 내부 구현이 for-in으로 구현되어 있다는 것을 볼 수 있다. @_inlineable public func forEach( _ body: (Element) throws -> Void ) rethrows { for element in self { try body(element) } } 즉 for-in과 forEach가 성능상으..
JSON 객체에서 데이터 타입의 인스턴스를 디코딩해주는 JSONDecoder에는 기본적으로 decoding에 대한 Strategy가 존재한다. 물론 CodingKey를 사용하여 어떤 식으로 JSON 파일을 디코딩할 지 정해줄 수도 있다. 하지만 일일이 CodingKey를 정해줘야 하는 만큼 만약 이미 정해진 Strategy가 있다면 훨씬 간단하게 디코딩을 해줄 수 있다. KeyDecodingStrategy 일단 먼저 KeyDecodingStrategy를 살펴보자. KeyDecodingStrategy는 JSONDecoder에 정의된 열거형으로 그 종류는 3가지가 있다. useDefaultKeys: 디코딩할 때 key의 name을 변경하지 않는다. convertFromSnakeCase: Snake-Case로..
LinkedList를 Queue 타입으로 구현해보자! 먼저 Queue 타입이 뭘까? Queue는 컴퓨터의 기본적인 자료구조로 먼저 들어온 순서대로 처리를 해주게 된다. (선입선출, FIFO - First In First Out으로 대기열을 구현하는 것이다) 만약 Queue 타입에 데이터를 넣게 되면 아래 그림처럼 가장 마지막에 들어오게 된다. 11번째 데이터처럼 가장 마지막에 들어오게 되는 것이다. Queue에서 데이터를 빼주게 되면 처음 들어온 것이 가장 처음 나가게 된다. 즉, 가장 먼저 들어 온 1번 데이터가 가장 먼저 나가게 되는 것이다. 그럼 이런 Queue 타입을 위한 LinkedList를 구현해보자. 일단 LinkedList의 경우 Array List와는 다르게 요소(Node)와 요소(Nod..
NumberFormatter를 보면 지정한 소수점에 맞춰 어떻게 올림, 버림, 반올림을 할 지 정할 수 있는 인스턴스 프로퍼티가 존재한다. 제목에도 나와있듯 roundingMode가 바로 그것이다. 여기서는 7가지 종류로 어떻게 소수점을 처리할 지 정할 수 있다. .up .down .ceiling .floor .halfUp .halfDown .halfEven 그렇다면 각각 어떤 식으로 소수점을 처리하는 것일까? .up Round away from zero. 0으로 부터 멀어지도록 소수점을 처리하게 된다. 즉 음수일 때는 작아지는 방향으로, 양수일 때는 커지는 방향으로 소수점을 처리한다. 만약 let numberFormatter = NumberFormatter() numberFormatter.maximum..