일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- Swift
- UIKit
- colorofdays
- SwiftUI
- Masil
- CS193p
- 청년취업사관학교후기
- 오늘의 색상
- IOS
- 스터디
- 프로젝트회고
- 조건문
- ImageSlider
- 새싹후기
- process
- MVVM
- WidgetTree
- flutter
- 코딩테스트
- GIT
- stanford
- xml
- UserDefault
- 스위프트
- xcode
- collectionView
- flutter #state # stateful #stateless
- 프로그래머스
- 알고리즘
- Today
- Total
목록IOS (44)
개발을 시작하는 이야기

원래는 카카오맵 연동을 먼저 쓰려고 했는데 연동까지는 했는데 그 활용이 아직은 좀 더 해봐야 해서 일단 먼저 작성한 전화 연결을 먼저 작성해봄. iOS는 URL Scheme를 활용하여 메일, 전화, 문자 FaceTime등을 연결할 수 있었다. Apple Developer Documentation developer.apple.com URL Scheme 적용 방법 URL Scheme 문자열을 통해 URL 인스턴스를 만들어주고, canOpenURL(_ :) 메서드를 활용해서 URL 체계를 처리할 수 있는지 여부를 확인한다. let url = ... func canOpenURL(_ url: URL) -> Bool Apple Developer Documentation developer.apple.com 사용 가능..

지난번 글에 이어서 ProgressView 부터 이제는 ProgressView에서 Cell의 순서에 맞게 표시해주도록 설정을 해주어야 한다. Apple Developer Documentation developer.apple.com 일단 progress에서 현재 상황을 알려줄 변수를 하나 작성해주었다. //MARK: - Data var progress: Progress? 그리고 이제 진행상황에 맞추어 completedUnitCount를 업데이트 해주면 된다. 하지만 이때 주의할점은 최초 로드시에는 0이 아닌 1이여야 한다. 처음 로드하게 되면 첫 페이지가 보여지고 있어야 하기 때문이다. private func configureProgressView() { progressView.progress = 0.1 ..

이전에 그럼 우린 스레드와 프로세스에 대해서 알아봤다. 프로세스는 실행될때 운영체제로 부터 각각 독립된 메모리 영역을 할당받지만 스레드는 프로세스 내에서 스텍 영역만 별도로 할당받고 부모 프로세스의 Code, Data, Stack, Heap 영역은 공유하게 된다. 따라서 프로새스 내에서 자식 스레드들은 서로 주소 공간이나 자원을 공유하면서 실행될 수 있다. (스텍은 서로간의 데이터 공유가 수월하지만 프로세스간의 데이터 공유는 그렇지 않다고 한다. 하지만 불가능 한것은 아니라고 함) 그럼 이젠 멀티 스레드에 대해 알아보자 멀티스레드는 하나의 어플리케이션을 여러개의 스레드로 구성하여 하나의 스레드가 하나의 작업을 처리하도록 하는 것이다. 만일 단일 스레드로 네트워크나 데이터베이스 통신과 같은 긴 작업을 수행..

지금의 내 앱은 싱글스레드만 사용하고 있다. 하나의 스레드만 사용해서 덜 복잡하고, 단순하게 작성할 수 있었지만 앱의 사용자 경험은 더 낮아졌다. 앱의 최초 실행 시 데이터를 저장하는데 소요되는 시간은 1분 정도 걸리는 것이 무척 불편한 편이고, 포트폴리오로 제출할 때 심각한 마이너스 요소라고 생각해서 이를 멀티스레드로 변경하려고 한다. 그럼 일단 싱글 스레드, 멀티 스레드 라고 하는데 스레드가 뭘까? 일단 모르는 건 공식문서부터 보라고 배웠으니 공식문서를 살펴보자. [공식문서 : Thread] A thread of execution. 스레드는 긴 작업을 수행해야 하지만 애플리케이션의 나머지 실행을 차단하고 싶지 않을 때 특히 유용하다. 특히 스레드를 사용하여 사용자 인터페이스 및 이벤트 관련 작업을 처..

강의 보기 : Youtube :: Stanford rotation3DEffect 카드를 선택했을 때 fade 효과나 scale 같은 효과가 아닌, 카드를 뒤집는 효과를 주기 위해 Cardify의 ZStack에 rotation3DEffect 효과를 주었다. 뒤집는 효과를 주기 위해 axis의 y축에만 효과를 주었다. 카드는 정상적으로 뒤집을 수 있지만 다른 곳에서 문제가 발생했다. 카드를 뒤집기 시작하는 순간부터 카드가 미처 다 돌아가지 않았음에도 이모지가 서서히 나타나기 시작하는 문제가 발생했다. 이는 이모지를 보여주는 content를 opacity효과를 주면서 (isFaceUp ? 1:0)의 변화에 의존하기 때문이다. struct Cardify: ViewModifier { var isFaceUp: Bo..

우리의 바람 잘날 없는 Xcode는 오늘도 말썽이다. 얼마 전에 테스트 기기가 소프트웨어 업데이트를 한다고 해서 아주 잠깐 '뭐 하던가 말던가' 하며 멍 때리다 정신을 차렸을 땐 이미 한창 업데이트 중이었다. 하... 그리고 역시나 iPhone 업데이트 이후 Xcode에서 iPhone으로 실기계 빌드를 하면 다음과 같은 애러가 발생했다. This operation can fail if the version of the OS on the device is incompatible with the installed version of Xcode. You may also need to restart your mac and device in order to correctly detect compatibility...

강의 보기 : Youtube :: Stanford Animation 애니메이션 효과는 변화가 발생했을 때만 나타난다. 1. View가 이미 UI에 들어가 있는 상태에서 ViewModifier의 인자가 바뀌었을 때 2. shape가 바뀌었을 때 3. UI 내부의 View가 생기거나 사라질 때 UI상의 View container에 추가되는 경우 UI상의 View container에 제거되는 경우 if-else, ForEach문 애니메이션을 실행하는 세 가지 방법 Implicit Animation .animation(Animation) View Modifier를 이용한 방식 duration, delay, repear, curve 등 직접 지정할 수 있다. .animation 앞의 모든 View Modifier..

강의 보기 : Youtube :: Stanford Protocol 특정 기능을 수행에 필요한 필수적인 속성이나 메서드를 정의한다. protocol Moveable { func move(by: Int) var hasMoved: Bool { get } var distanceFromStart: Int { get set } } struct PortableThing: Moveable { func move(by: Int) { print("\(by)만큼 움직입니다") } var hasMoved var distanceFromStart } 프로토콜은 또 다른 프로토콜을 따를 수 있다. protocol Moveable { var hasMoved: Bool { get } } protocol Messagable: Moveab..

접근제어가 있다는 건 알고 있지만, 이걸 사용하지 않아도 잘 작동하는데 굳이 왜 사용해야 하는지, 사용한다면 어떤 식으로 어느 정도 수준까지 사용해야 하는지 알아보고 내 앱에 적용하기 위해 작성함. 객체지향 프로그래밍 패러다임에서 캡슐화와 은닉화는 중요한 개념 중 하나이고, 이를 구현하기 위한 핵심 기능이 접근제어라고 한다. 캡슐화와 은닉화를 구현하는 이유는 외부에서 보거나 접근하면 안 되는 코드가 있기 때문이다. 불필요한 접근으로 의도치 않는 결과를 초래하거나 꼭 필요한 부분만을 제공해야 하는데 전체 코드가 노출될 가능성이 있을 때 접근제어를 이용한다. 접근제어는 접근수준 키워드를 통해 구현할 수 있는데, 각 타입(클래스, 구조체, 열거형 등)에 특정 접근 수준을 부여할 수 있고, 타입 내부의 프로퍼티..

강의 보기 : Youtube :: Stanford @State, @Binding @State는 단어 그대로 현재 상태를 나타내는 속성으로, 뷰의 어떤 값을 저장하는 데 사용된다. 현재 뷰 UI의 특정 상태를 저장하기 위해 만들어진 것이기 때문에 보통 Private로 지정하여 사용한다. @State 속성의 프로퍼티 값은 재 할당을 하더라도 변경되지 않는데 @Binding 변수를 통해서 변경이 가능하다. @Binding은 단어 그대로 구속력 있는, 묶여 있다는 뜻으로, @State 속성으로 선언된 프로퍼티와 묶여 있다고 생각하면 된다. @State는 주가 되는 뷰에 선언을 해주고, 선언된 프로퍼티를 다른 뷰에서 사용하기 위해서는 @Binding을 사용한다. 그리고 사용 시에는 $를 앞에 붙여주어 Bindin..