일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cs
- 멋쟁이사자처럼
- c++
- Protocol
- widgetkit
- 리액트
- Swift
- 운영체제
- 위젯킷
- 스위프트
- 대외활동
- uikit
- 후기
- composable architecture
- swift concurrency
- 컴퓨터그래픽스
- 문법
- 멋사
- 네트워크
- 웹
- 영남대
- widget
- 백준
- spritekit
- 알고리즘
- ReactorKit
- dispatchqueue
- TCA
- 스유
- SwiftUI
- Today
- Total
목록앱 (115)
맛동산이
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..
이전에도 다양하게 다룬적이 있지만 이제야 좀 정리가 되는느낌이라 다시한번 정리하려고 합니다. Thread 스레드는 cpu에서 바라보는 작업단위이다. 프로그램은 저장소에 저장되어있는 코드 덩어리이고, 이 코드덩어리가 메모리에 올라간 상태를 프로세스라고 한다. 프로세스는 cpu가 할당되어진 프로그램의 상태인것 프로세스 내부에서 동시성(time slicing)방식으로 여러개의 일을 처리할수 있는데, 이때 생성되는 독자적인 프로세스 내부의 작업 단위를 스레드라고한다. ex) 크롬이라는 프로그램이 메모리에 올라가면 프로세스, 해당 크롬에서 여러개의 창이 켜진상태를 여러 스레드가 존재한다고 생각하면 쉽다. Thread pool 위의 스레드 생성방식에서 계속해서 새로운 스레드를 생성하는것은 좀 불필요한 작업일수 있기..
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..
InterFace 인터페이스란 서로다른 두 시스템의 데이터를 주고 받는 경계면을 의미한다. UserDefaults 앱을 실행하는 경우 지속적으로 key-value로 값을 저장하는 사용자의 기본 데이터 베이스 인터페이스 이다. 즉 앱을 실행하는 동안 사용자의 기본 데이터를 key-value값으로 저장하는 경계면을 의미한다. 런타임에서 userDefaults객체를 이용하여, 사용자의 기본 userDefaults DB에서 기본 설정값을 액세스 하며, UserDefaults는 해당 값을 캐시하여 기본 설정 디비를 열필요 없도록 계속해서 기기에서 값을 가지고 있게 된다. 기본값을 설정하면 프로세스 내에서 동기적으로 변경되며, 비동기적으로 다른 프로세스에 변경사항이 전파된다. UserDefault는 싱글톤으로 단하..
Collection Swift에서는 collection type으로 set, tuple, array, dictionary을 제공하고 있다. collection타입은 sequence, 와 iterator protocol 두개의 프로토콜을 채택하고 있다. 해당 프로토콜에 대해서 공부하고자 하며 더 나아가 asyncSequence에 대해서 공부해보고자 한다. Sequence sequence는 프로토콜로, 해당 프로토콜을 채택하면, 하나하나의 원소를 순회할수 있게 된다. 해당 프로토콜은 make iterator라는 iteratorProtocol을 준수하는 associatedtype(지네릭을 사용하기 위한 플레이스홀더 와 같은 타입)을 정의하고 있다. 이를 통해서 makeIterator 함수를 구현해야하며 해당 ..
기본적으로 physicsBody는 쉐입을 다양하게 줄수있지만, 우리는 보통 해당 물체의 라인에 맞게 physicsbody를 주어야 한다. 그렇지 않으면 맞지도 않았는데 마치 보호막이 존재하는 것처럼 튕겨나갈지도 모르기 때문이다. 해당 부분에 대해서 공식도큐먼트에는 다음과 같이 나타나있다. 저렇게 대충 만들지 말고 쉐입으 딱 맞게 하는방법! let sprite = SKSpriteNode(imageNamed: "Spaceship") sprite.physicsBody = SKPhysicsBody(texture: sprite.texture!, size: sprite.texture!.size())
코어모션은 장치의 가속도계와 자이로스코프, 사용 가능한 경우 보수계, 자력계 및 기압계가 포함한 데이터를 가지고 있는 프레임워크이다. 해당 프레임워크를 가지고 중력센서를 통해서 SpriteKit의 화면에 중력을 작용시켜보자! PhysicsWorld 모든 scene은 자동적으로 물리현상을 구현하기 위해서 physicsWorld를 생성하며, physicsWorld는 SKScene위에 잇는 모든 노드들의 physics 프로퍼티에 접근할수 있다. 따라서 우리는 SpriteKit의 scene의 physicsWorld의 gravity를 줄 예정이다. 중력을 바꾸기 위해서는 중력을 바꾸는 값을 가져와야 하는데 해당 값을 coreMotion으로 기기의 기울기를 통해서 가져올수 있다. CoreMotion을 통해서 기기의..
1. 프로젝트에서 위젯 익스텐션을 만들어준다. 2. live Activity를 확인한다. 이거하고 나면 무슨 알람창이 뜨는데 그냥 확인 하면 됩니다. 3. 위젯이 생성됨 이렇게 프로젝트 좌측에 Widget이라고 생성이 된다. 4. 기존 프로젝트에서 쓴 extension과 같은것들을 사용할때 target을 추가해줘야한다. 이거설정 빼놓지 말고 쓰시길!
위젯에서 가장 중요한 3요소는 다음과 같다. Widget Configuration Provider EntryView Widget Configuration configuration과 관련된 속성값들 위젯 편집하기에 들어갔을때 생성되는 위젯추가 창, 혹은 위젯의 편집과 관련된 정보를 가진 객체가 바로 WidgetConfiguration이다. configuration 파라미터 kind 위젯의 identifier(아무거나 지정해주면 됨, 보편적으로 bundle id ) intent 유저가 구성할수 있는 속성 (static은 없음) provider 위젯의 뷰를 업데이트할 타이밍을 알려주는 객체 content 위젯에 보여줄 뷰 Configuration 종류 IntentConfigurationt예 ) to-do li..