일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 네트워크
- 문법
- 후기
- TCA
- 웹
- 1일1알골
- 위젯킷
- uikit
- c++
- 백준
- 영남대
- 대외활동
- 운영체제
- dispatchqueue
- SwiftUI
- spritekit
- widget
- 멋쟁이사자처럼
- 컴퓨터그래픽스
- swift concurrency
- 스위프트
- composable architecture
- cs
- 알고리즘
- Swift
- Protocol
- 스유
- 멋사
- 리액트
- widgetkit
- Today
- Total
목록앱 (110)
맛동산이
기존의 에러 핸들링(completionHandler)기존의 escaping closure의 completionhandler를 통해서 비동기처리를 해줄때, error처리가 상당히 어려워진다.예시로써func fetchData(completion: @escaping (Data?, Error?) -> Void) { //... } fetchData { (data, error) in guard error == nil else { handleError(error!) } guard let data = data else { return } completion(data) }이러한 코드에서 실제로 예외처리가 가능한 경우의 수는 다음과 같다. Data, Error : True, FalseData, Error : True, T..
associatedtypeassociatedtype은 프로토콜에서 지네릭을 사용하기 위해서 사용하는 문법이다. Generic이란지네릭이란, 타입에 의존하지 않고 범용적으로 코드를 작성할때 사용하는 방식으로, 실제 함수가 호출될 때 해당 매개변수의 타입으로 대체되는 Placeholder를 의미한다. 하지만 기존의 프로토콜에서 지네릭을 사용하고 싶다면 associated type을 사용하라고 가이딩 한다. 실제로 사용하려면 이렇게 하면된다. 이거를 실제 채택한 클래스에서 다음과 같이 사용하면된다. protocol someProtocol { associatedtype someType func getSomeType(t: someType) } class Adapt: someProtocol { typealias s..
GCD란, iOS에서 멀티코어 프로세스에서 멀티스레딩을 지원하게 해주는 애플이 개발한 기술이다. GCD를 사용하기 위해서는 Dispatch라는 프레임워크를 사용하면 된다.Dispatch 프레임워크에는 DispatchQueue, DispatchWorkItem과같은 다양한 클래스가 존재한다.이를 통해서 Dispatch Queue 에 작업을 보내면 그에 따라 스레드를 적절히 생성해서 실행하고 작업이 종료되면 스레드를 GCD가 자동으로 제거한다. Serial, Concurrent serial은 단일 스레드 환경concurrent는 다중스레드 환경// Serial Queue DispatchQueue(label: "Serial") DispatchQueue.main // main은 전역적으로 사용되는 Serial D..
애니메이션 처리를 하던 도중 계속해서 애니메이션이 @State 의 변경에도 불구하고 변경되지 않는 것을 확인하엿다. 왜그런가 해서 다른사람들이 처리한 애니메이션을 봤는데 다른사람은 AnimationHash라는 클래스를 설정해서 애니메이션이 변경되도록 처리해주어서 해당 코드를 분석한 결과 Identifiable이라는 프로토콜을 채택하는것으로 문제를 해결했다고 생각이 들어서 이에 대해서 정리해본다. identifiableidentifiable이란 프로로토콜로, instance 가 stable identity를 가지도록 하는 프로토콜이다.여기에서 말하는 stable identity란, being able to see yourself as same person in the past, and future로, 생성..
비동기 처리를 하던중, 네트워킹을 한 코드에서 completion이 나면, 이후에 실행될 코드를 작성을 해야하는데, 이를 코드 내부에 처리를 해주려고 하니 컴파일 에러가 발생하였다. 또한 내부에서 해당 부분을 처리해주려고 해도 코드가 더러워지는 문제를 발생시키는것같아서 escaping closure에 대해서 정리하고 해당 부분을 사용해 문제를 해결해 보고자 한다. Closure우선 당연하게도 closure이 뭔지 알아야 한다.closure은 이름이 없는 함수이다. 그렇다면 이름이 있는 closure는? 함수이다.클로저는 중요한것은 클로저 그 자체가 1급 객체이므로, 매개변수로, 반환값으로, 비교 대상으로 다 지정이 가능하다.func getPrint() { print("printed") } func get..
UIKit에서는 Search bar를 만드는 방법은 크게 두가지가 있다. Search barSearchConroller그렇다면 두개의 차이는 무었일까?????????????UISearchBarsearch bar는 말 그대로 서치바 이다. UISearchBar provides a text field for entering text, a search button, a bookmark button, and a cancel button. A search bar doesn’t actually perform any searches. You use a delegate, an object conforming to the UISearchBarDelegate protocol, to implement the actions ..
Pull Down Button A pull-down button displays a menu of items or actions that directly relate to the button’s purpose. 풀다운 버튼을 사용하여 버튼의 동작과 직접 관련된 명령이나 항목을 표시한다. 메뉴를 사용하면 사용자가 인터페이스에 추가 버튼을 요구하지 않고도 버튼의 대상을 명확히 지정하거나 동작을 사용자 지정할 수 있다. 예시 ) 추가 버튼은 사용자가 추가하려는 항목을 지정할 수 있는 메뉴를 제공할 수 있습니다. 정렬 버튼은 사람들이 정렬할 속성을 선택할 수 있도록 메뉴를 사용할 수 있습니다. 뒤로 버튼을 사용하면 사람들이 이전 위치를 여는 대신 다시 방문할 특정 위치를 선택할 수 있습니다. 즉 풀다운 버튼은 ..
골라밥 프로젝트를 하다가, 뷰 전환에 대해서 좀 고민을 많이했다. 원래 상태는 다음과 같다. 이렇게 3개의 뷰에서 2번뷰에서 버튼을 누르면 1번뷰로 2번뷰를 제거 한다음 3번뷰를 push해주는 방식이었다. 여기에서 처음에 생각한 방법은 delegate패턴을 사용해서 2번뷰에서 클릭이벤트 발생시 1번에서 감지하여 3번을 띄워주는 방법이었는데이를 사용하자니, 2번뷰가 dismiss되는부분에서 delegate가 정상적으로 작동하지 않았다. 따라서 나는 어쩌피 3개의 뷰에서 계속 상태를 체크해야하기 때문에, 싱글톤 객체를 통해서 상태값을 저장하는것으로2번뷰에서 버튼을 누르면 dismiss하고, 1번뷰에서 willappear에서 체크를하여서 3번뷰를 띄워주는 방식을 채택하였다. 여기에서 3번뷰에서는 willapp..
프로토콜은 타입으로 사용이 가능하다. 이것은 해당 프로토콜을 채택한 어떠한 클래스의 인스턴스도 들어갈 수 있다는 것을 의미한다." You can set it to an instance of any type that adopts the protocol ."예를 들어protocol Human { func getAge() -> Int } class Male: Human { var age: Int init(_ age: Int) { self.age = age } func getAge() -> Int { return age } } class Female: Human { var age: Int var name: String init(age: Int, name: String) { self.age = age self.n..