일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 1일1알골
- 멋사
- swift concurrency
- 백준
- spritekit
- uikit
- Swift
- 문법
- c++
- 웹
- 아이디어톤
- 대외활동
- 리액트
- widget
- widgetkit
- 후기
- 영남대
- 알고리즘
- 운영체제
- 스유
- 네트워크
- 위젯킷
- 컴퓨터그래픽스
- cs
- 멋쟁이사자처럼
- 리엑트 네이티브
- dispatchqueue
- 스위프트
- Protocol
- SwiftUI
- Today
- Total
목록SwiftUI (31)
맛동산이
위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다.간단하게 설명하자면 위젯에서는EntryProviderWidgetView로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다.iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다.하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다.AppIntent2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다.간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨텐츠를 사용할수 있도..
위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다. 간단하게 설명하자면 위젯에서는 Entry Provider Widget View 로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다. iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다. 하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다. AppIntent 2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다. 간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨..
Combine을 처음 공부할때 가장힘들었던점 콤바인, rx모두 같은 맥락으로 처음 공부할때 힘든점은 그래서 subscriber, publisher가 뭔지는 알겠는데 어떻게 생성하는가? 이다. 따라서, 최대한 쉽게 나만의 해석을 하고 이해하여서 설명해보려고 한다. Combine을 사용하는 이유 우선 콤바인을 사용하는 이유를 이해 해야하는데, 콤바인을 사용하는 이유는 공식문서에 나와있다. 하지만 내가 생각하는 combine이나 rx를 사용하는 이유는 바로 데이터 바인딩을 하기 위함이다. 데이터 바인딩을 한다는 말은, 뷰에 있는 어떠한 컴포넌트(textfield, button, text..)에 이벤트 감지를 하고, 감지를 통해서 다시 어떠한 값의 변경을 이끌어 내는것을 의미한다 나는 이러한 방법에서 combi..
리액터킷은 Flux와 Reactive Programming의 조합으로 만든 프레임워크이다. 유저액션과, 뷰 상태는 옵저버블(rx)스트림을 통해서 각각의 레이어에 전달된다. 여기에서 중요한점! 뷰는 액션만을 방출한다. 리액터는 상태만을 방출한다. 이것을 통해서 단방향 구조를 형성한다. 리액터킷의 특징 테스터블하다 뷰에서 로직을 분리하기 때문에(리액터를 통해서) 테스터블하다. 특정뷰에서만 채택이 가능 전체 아키텍쳐를 사용하지 않고 필요한 부분만 채택가능하다는 장점 타이핑이 적다 간결하게 코딩할수있다는 장점이 있다. View 리액터킷에서 뷰는 뷰 컨트롤러이다. 역할은 다음과 같다. 유저인풋을 받아들이고 이를 액션스트림에 추가한다. view state를 각 UI component에 추가한다.(bind) 뷰는 어..
Concurrent라는 뜻 iOS에서는 time Slicing을 하고 있다. (당연한 이야기) 따라서 single Thread라면, context switching을 통해서 병렬적 작업을 muti Thread라면 parallelism하게 동작한다. DispatchQueue DispatchQueue는 GCD의 쓰레드의 관리를 위한 객체가 존재함 해당 객체의 존재는 serial 과 concurrent queue두개가 존재 serial : task의 시간을 보장해주며, 순차적으로 진행 concurrent : 동시에 여러 task를 수행할수 있음 기본적으로 serial임. let queue = DispatchQueue(label: "start") queue.async { for i in 0...5 { sleep..
rethrows란 함수를 파라미터로 받는 함수에서 에러가 발생할수 있음을 의미하는 키워드이다. 즉 최소 한개 이상의 에러를 throw하는 함수를 매개변수로 받아야 한다. 간단한 예제는 다음과 같다. enum Errors: Error { case someError } func throwErrors(about value: Int) throws -> Int { if value == 0 { throw Errors.someError } return value } func checkThrow(completion: (Int) -> Int ) { do { try throwErrors(about: 0) } catch (let error) { print(error.localizedDescription) } } checkT..
이전에도 다양하게 다룬적이 있지만 이제야 좀 정리가 되는느낌이라 다시한번 정리하려고 합니다. Thread 스레드는 cpu에서 바라보는 작업단위이다. 프로그램은 저장소에 저장되어있는 코드 덩어리이고, 이 코드덩어리가 메모리에 올라간 상태를 프로세스라고 한다. 프로세스는 cpu가 할당되어진 프로그램의 상태인것 프로세스 내부에서 동시성(time slicing)방식으로 여러개의 일을 처리할수 있는데, 이때 생성되는 독자적인 프로세스 내부의 작업 단위를 스레드라고한다. ex) 크롬이라는 프로그램이 메모리에 올라가면 프로세스, 해당 크롬에서 여러개의 창이 켜진상태를 여러 스레드가 존재한다고 생각하면 쉽다. Thread pool 위의 스레드 생성방식에서 계속해서 새로운 스레드를 생성하는것은 좀 불필요한 작업일수 있기..
InterFace 인터페이스란 서로다른 두 시스템의 데이터를 주고 받는 경계면을 의미한다. UserDefaults 앱을 실행하는 경우 지속적으로 key-value로 값을 저장하는 사용자의 기본 데이터 베이스 인터페이스 이다. 즉 앱을 실행하는 동안 사용자의 기본 데이터를 key-value값으로 저장하는 경계면을 의미한다. 런타임에서 userDefaults객체를 이용하여, 사용자의 기본 userDefaults DB에서 기본 설정값을 액세스 하며, UserDefaults는 해당 값을 캐시하여 기본 설정 디비를 열필요 없도록 계속해서 기기에서 값을 가지고 있게 된다. 기본값을 설정하면 프로세스 내에서 동기적으로 변경되며, 비동기적으로 다른 프로세스에 변경사항이 전파된다. UserDefault는 싱글톤으로 단하..
코어모션은 장치의 가속도계와 자이로스코프, 사용 가능한 경우 보수계, 자력계 및 기압계가 포함한 데이터를 가지고 있는 프레임워크이다. 해당 프레임워크를 가지고 중력센서를 통해서 SpriteKit의 화면에 중력을 작용시켜보자! PhysicsWorld 모든 scene은 자동적으로 물리현상을 구현하기 위해서 physicsWorld를 생성하며, physicsWorld는 SKScene위에 잇는 모든 노드들의 physics 프로퍼티에 접근할수 있다. 따라서 우리는 SpriteKit의 scene의 physicsWorld의 gravity를 줄 예정이다. 중력을 바꾸기 위해서는 중력을 바꾸는 값을 가져와야 하는데 해당 값을 coreMotion으로 기기의 기울기를 통해서 가져올수 있다. CoreMotion을 통해서 기기의..