일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RxSwift
- state
- GCD
- WWDC
- arkit
- authentication
- gesture
- iphone
- 접근성제어
- swift
- withAnimation
- auth
- Performance
- ios
- combine
- Network
- 네트워크
- SwiftUI
- view
- stateobject
- toolbarvisibility
- 달력
- CS
- avsession
- 최적화
- UIKit
- Animation
- firebase
- dataflow
- Concurrency
- Today
- Total
목록swift (30)
XLOG

Async/await 은 concurrency programming 을 위한 swift 5.5 에 나온 기능이다. 기존에는 비동기 프로그래밍을 위해 GCD를 사용하며 completion handler를 많이 사용했다. 하지만 여기에 큰 문제점이 있다. thread explosion, deadlock, 가독성 등 개발자들은 조금 더 쉽고 안전하게 비동기프로그래밍을 하길 원한다. 그래서 채택하게 된 것이 async/await 이다. 우선 wwdc 영상에 나온 예시 코드를 먼저 살펴보자. 우선 위에 코드는 기존 completion handler 를 사용한 방법이다. wwdc21 Meet async/await in Swift 영상에서 나온 코드인데, 설명 중에 guard let ~ else { return } ..

GCD ( Grand Central Dispatch )는 다중 코어 프로세서 및 기타 대칭 다중 처리 시스템이 있는 시스템에 대한 응용 프로그램 지원을 최적화하기 위해 Apple Inc.에서 개발한 기술입니다. 이 간단하게 우리의 핸드폰, 컴퓨터는 멀티 프로세스, 멀티 스레드를 지원한다. 자연스럽게 웹과 앱에서도 다중 처리 시스템이 도입되게 된다. iOS로 설명을 하자면 iOS서는 메인쓰레드를 통해 UI 업데이트를 진행하고 있다. 하지만 UI 를 업데이트를 할때 연산, 데이터 다운로드 등의 네트워킹 작업들이 함께 동반되어야 한다. 하지만 UI 업데이트를 위해 필요한 작업들은 우리 UI의 반응을 멈추게 하면 안된다. 이것은 애플이 강조하는 바이다. ( 참고, Swift 에서는 Thread pool 관리를 ..

프로젝트를 진행하면서 UICollectionView 와 Image를 함께 사용할 일이 많았다. Asset을 이용하여 사용할 때는 큰 문제가 없었지만, 서버에서 이미지를 불러오면서 그 효율성에 대한 고민을 하기 시작했다. 그리기 위해 UIImage, UiImageView 가 어떻게 동작하는지 알아야 겠다는 생각을 했다. 그래서 WWDC18 에 Image and Graphics Best Practice 영상을 확인했다. 보통 이미지는 우리 데이터공간, 혹은 네트워크를 통해 다운받아 UIImage로 Load 하여 Decode 한다. Decode를 하는 과정에서 image사이즈에 따라 image buffer의 크기가 결정된다. Buffer 란 연속되 메모리 영역이다. Buffer엔 Data Buffer, Ima..

시작에선 비동기 프로그래밍에 대해 이야기를 해보자고 시작을 한다. 위 화면에서 보면 회원가입시 앱은 user name, password 를 요청하며 이때 유효한 user name 인제, password 는 맞는지 확인을 해야한다. username의 경우엔 타이핑을 감지, 멈추면 서버와 통신하여 유효한지 확인, 패스워드의 경우는 패스워드 확인과 같은지 체크를 해야한다. 기존엔 그러기 위해 수많은 타겟, 액션이 필요했다. 또한 이 과정에서 메인스레드가 막히지 않게 하여 반응형 유저인터페이스가 유지하도록 해야한다. ( user name을 확인하는 중에 password를 입력하거나, 확인하거나가 같이 이루어져야 한다 ) 참 많은 비동기 동작을 진행해야하기에 복잡하며, 좀 더 사용성을 쉽게 하기 위해 서드파티를 ..

우선적으로 프로젝트에 FirebaseAuth 와 GoogleSignIn을 설치해야 한다. (pod or Swift Package Manager) 이용 custom URL schemes 를 Xcode 프로젝트에 추가한다. GoogleService-Info.plist 에 REVERSED_CLIENT_ID 값을 확인(복사) Info plist에서 URL Types 에 + 버튼 클릭 URL Schemes 에서 a에서 복사한 붙여넣기 URL Scheme는 특정 형태의 URL로 내 앱을 호출할 수 있다는 것이다. 즉 URL을 통해 다른 앱과 통신할 수단을 제공하는 것이다. AppDelegate 에 application:didFinishLaunchingWithOptions: 메서드에 FirebaseApp.config..
iOS 15 부터 UITableView 섹션 헤더에 기본 패딩이 적용되어 있다. 섹션 헤더 패딩값을 제로로 만들기 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if #available(iOS 15.0, *) { UITableView.appearance().sectionHeaderTopPadding = .zero } return true }

사용할 방법은 GeometryReader 와 preference 를 이용한다. 그러기 위해 우리는 GeometryReader 를 먼저 알아야 한다. GeometryReader는 컨테이너 뷰가 가지고 있는 사이즈, 좌표공간을 반환해주는 함수 이다. 그렇다면 preference 란 무엇일까? 주어진 preference(선호?)로 값을 set 해준다는게 무슨 말일까….. 이것은 SwiftUI 가 view의 사이즈, 위치를 어떻게 결정을 하는지에 대한 원리에 대한 이해가 필요하다. 자세히 작성을 하다보면 내용이 너무 길어진다. 그냥 간단하게 보통 상위뷰에서 하위뷰로 데이터를 전달하는데 가끔 우리는 하위뷰에서 상위뷰로 데이터를 전달을 하고 싶을 때가 생긴다. 그때 하위뷰가 원하는(선호하는) 데이터(사이즈, 위치 ..
ForEach 를 사용하여 카드컴포넌트를 구성한 후, 각 컴퍼넌트에 onTapGesture를 적용했더니, 터치 영역에 문제가 생겼다. 인덱스 0 번의 컴퍼넌트 중간 아래부분 부터는 인덱스 1번 영역으로 터치가 인식되는 것이었다. resizable을 적용한 후, onTapGesture를 적용하였지만, resizable이 먹히지 않은 것 같다는 생각에 검색을 해봤다. 기존 코드 예시 var body: som View { ForEach(Array(myArray.enumerated()), id: \.offset) { index, item in cardView(item: item, index: index)) } } @ViewBuilder func cardView(item: itemType, index: Int) ..
SwiftUI의 경우 view에 onTapGesture를 추가하게 되면 간단하게 탭제스쳐에 반응을 할 수 있게 된다. 하지만 UIKit에서는 onTapGesture가 없다. 하지만 개발을 하다보면 버튼이 아닌 imageView 나 기타 UIView에 액션을 추가하고 싶은 일이 발생한다. 우리에게 필요한것은 gesture 객체와, view가 필요하다. 또한 viewController에 view에 isUserInteractionEnabled 의 변수 값을 true로 설정해주면 된다. private let actionView = UIView() let gesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(t..
우리는 UITextField를 컨트롤 하기 위해 UITextFieldDelegate를 상속받아야 한다. UITextFieldDelegate에는 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {} 함수가 존재하는데 return 값이 true 면 수정이 가능하며, false 면 textfield 값의 수정이 불가능 하다. 맨처음 접근은 위의 함수에서 string 값의 갯수를 카운트하여 갯수에 따라 return 값을 조절해 주려고 했다. 하지만 한글은 초성, 중성, 종성이 결합되어 한글자로 카운트가 되어야 한다. 하지만 위에 함수에서는 ..