일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 영남대
- 스위프트
- SwiftUI
- 컴퓨터그래픽스
- uikit
- c++
- Swift
- 문법
- 네트워크
- widgetkit
- 알고리즘
- 웹
- 대외활동
- Protocol
- 후기
- 위젯킷
- 스유
- composable architecture
- spritekit
- 멋사
- 1일1알골
- swift concurrency
- cs
- 멋쟁이사자처럼
- dispatchqueue
- 백준
- TCA
- 리액트
- widget
- 운영체제
- Today
- Total
목록Swift (91)
맛동산이
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bkzIQ7/btsL1kssTat/PFIILRAobIp9w72kkuWvKk/img.png)
회사 작업을 하다보면 api의 목데이터나, 혹은 배포가 되기 이전에 목api를 사용하고 싶을때가 존재한다.이때 moya를 이용하고 있다면 목데이터를 직접 설정하여 사용할수 있다. Moya 기초moya는 alamofire를 래핑하고 있는 라이브러리로, TargetType이라는 프로토콜을 사용해서 상당히 간단하게 api를 작성하고 사용할수 있다.moya에서 사용하는 중요한 개념들Provider: Moya의 MoyaProvider는 모든 네트워크 서비스와 상호작용할때 사용할 객체Target: Moya target은 일반적으로 전체 API 서비스를 설명합니다. 타겟은 서비스, 그 자체의 가능한 끝점, 요청을 이행하는 각 끝점에 요구되는 정보를 설명합니다. TargetType 프로토콜을 체택하는 것으로 tar..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ckSdrh/btsL1z3VOFH/jaSnKKyKaXqXaIPrQkNXFK/img.png)
먼저 테스트 코드의 장점과 단점 이런글보다는이번글은 좀더 리액터킷의 테스트 코드를 짜기 위한 방법론에 가까운 글이다.무작정 한번 알아보자~ 테스트 코드 작성하는 방법테스트 케이스 이름 작성법test_유닛이름(구조체, 클래스 등)_유닛내부(프로퍼티, 메서드 등)_예상동작맨 앞에 test는 꼭 붙여줘야 테스트를 실행할 수 있다. 테스트 케이스 구조는 다음과 같다. 1. Given(주어진 상황)테스트 케이스에서 테스트할 상황을 설정하는 부분테스트에 필요한 초기 조건을 설정하고 입력값을 준비테스트 환경 설정 or 객체를 생성하는 등의 작업을 수행함 2. When(동작)테스트할 동작이나 메서드를 호출하는 부분테스트 대상이 되는 메서드나 특정 동작을 수행하고 그 결과를 확인 3. Then(결과 확인)테스트의 예상..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/eDXUTZ/btsKaQE0lJw/lsWZgfnwoorIYRgLVGoP11/img.gif)
Two button slider를 구한현 예제가 많지 않고, 거기에 이번에 회사 스팩중에 하나가 슬라이더 안에 밑에 격자가 들어가거나, 위에 점이 들어가거나 하는 커스텀이 많이 들어갔다.그래서 나처럼 구현할 사람이 있을것 같아서 블로그에 남겨본다.먼저 편의성을 위해서 snapkit과 then을 사용한 코드 임을 감안! 해주세요!슬라이더 예시 //// SliderView.swift// twoHandledSlider//// Created by 최진용 on 10/12/24.//import UIKitimport Thenimport SnapKitprotocol SliderViewDelegate: AnyObject { func sliderView(_ sender: SliderView, changedV..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Ds7GD/btsJEUHRIFh/079V8AnfZtLYi2ynkh1ro1/img.png)
딥링크란, iOS에서 url을 통해서 웹에서 앱을 호출하는 기능을 의미한다.딥링크의 방법은 크게, 3개정도로 나눌 수 있다.URL 스킴 : 앱내 URL 스킴을 저장하여 딥링크 사용유니버셜 링크 : 도메인 주소를 이용하여, 앱이 설치되어있는지 아닌지에 따라 앱내부 또는 앱스토어로 이동하게 하는 링크다이나믹 링크 : 파이어베이스에서 제공하는 딥링크의 일종iOS에서 유니버셜 링크와 딥링크의 차이점은사용 자체는, 사용자로 하여금 웹 페이지에서 앱으로 끌고 올 수 있다는 점에서 동일하다.하지만 Web fallback이 지원된다는 것 (앱이 없으면 웹으로 간다)이 가장 큰 차이.Deep link 주소로는 앱이 없다면 아무것도 할수 없지만, 유니버셜 링크에서는 앱이없다면 웹으로 호출하게 된다.결과적으로 같은 주소로 ..
swift concurrency와 result에 대해서 사용을 하려고 하다보니 Error타입에 대해서 계속해서 등장을하는데 한번도 제대로 공부해본적이 없는것 같아서 정리해보려고 한다.Error스위프트에서 Error는 Error라는 프로토콜을 준수하는 값 타입으로 표현된다.Error는 빈 프로토콜이라서 Error를 던져주기 위해서는 Error를 그냥 쓰면 안되고 enum으로 Error를 정의해서 던져줘야 제대로된 Error를 채택하는 에러를 ㅋㅋ( 말이 웃기네 ㅋㅋㄹㅋㅋ) 던져준다.그냥 간단하게 Error자체로는 못씀.enum으로 Error를 정의해줘야 사용가능Error 타입 정의enum NetworkError: Error { case 종류1 case 종류2 case 종류3 //.....
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/CzChW/btsJeOHXafT/hk23VlClFgFcKtZTsyHWZ1/img.png)
OptionSet은 Swift에서 바이너리 플래그값을 관리하거나 한개의 플래그 값을 조절할때 사용한다.즉 OptionSet은 어떠한 플래그값을 여러개로 나누어서 관리할때 사용한다는것이다.What is OptionSet? 옵션셋은 비트마스크를 이용해 여러가지 옵션을 다룰때 채택하는 프로토콜이다.옵션셋을 사용하여 다양한 옵션을 구현하려면 다음과 같이 사용하면 된다. struct ActionSheetOptions : OptionSet { let rawValue: Int static let report = ActionSheetOptions([]) static let edit = ActionSheetOptions(rawValue: 1 각 옵션은 shift 연산으로 구분된다.Why Optio..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bJRHFm/btsHQoYLchy/48DNS7kUrQWmEckLgF9iSk/img.png)
DecodableDecoder는 JSON type으로 오는 데이터를 네이티브한 포멧과 매핑이 가능하도록 하는 프로토콜이다.보통 Codable이 Encodable, Decodable 두개를 타입엘리어싱 하기 때문에 Codable만 채택해도 큰 문제는 없다.CodingKey실제로 RESTFUL API와 실제로 내부에서 사용하는 데이터의 네이밍이 다른경우가 많은데 이를 코딩키를 통해서 매핑해줄수 있다.struct DecodingModel: Decoding { let userName: String let userAge: Int enum CodingKeys: String, CodingKey { case userName = "user_name" case userAge = "user_age" ..
transform()transform() transforms each stream. There are three transform() functions:func transform(action: Observable) -> Observablefunc transform(mutation: Observable) -> Observablefunc transform(state: Observable) -> ObservableImplement these methods to transform and combine with other observable streams. For example, transform(mutation:) is the best place for combining a global event stream ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bLp1Y0/btsHmTeBrvm/QawIvKdB817UO6s33ZKzKK/img.png)
MKWebView란기존의 웹뷰는 UIWebView를 사용했지만, 현재는 deprecated되었다.따라서 WKWebView를 통해서 iOS에서는 웹뷰를 로딩할수 있다.WKWebView는 javascript를 통해서 네트워킹을 할수 있으며, 이는 비동기적으로 동작하게 된다.사전에 필요한 개념들을 미리 정리해보자!MKWebViewDataStore?MKWebView는 쿠키, 디스크 그리고 메모리캐시등 다양한 웹뷰의 데이터를 저장하고, 처리하는 클래스이다.즉 해당 클래스를 통해서웹사이트에서 사용하는 쿠키 관리웹사이트가 저장하는 데이터 타입 확인웹사이트에 저장된 데이터 제거등을 할수 있다.실제로 캐시를 제거하는 코드WKWebsiteDataStore.default().removeData(ofTypes:[WKWebsi..