일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- WKWebView
- Mobile
- 파사드패턴
- 컴포지트패턴
- ViewController
- 옵저버패턴
- Scenedelegate
- 팩토리메서드패턴
- 전략패턴
- 프록시패턴
- 어댑터패턴
- DispatchQueue
- RxSwift
- 컴파운드패턴
- 상태패턴
- unowned
- 데코레이터패턴
- 스테이트패턴
- Lifecycle
- 커맨드패턴
- ios
- Xcode
- 추상팩토리패턴
- 스트래터지패턴
- 이터레이터패턴
- cocoapods
- 싱글턴패턴
- 디자인패턴
- 템플릿메서드
- SWIFT
- Today
- Total
목록전체 글 (65)
ios dev kangwook.
UI 작업을 하다보면 shadow와 border, cornerRadius 작업을 해야하는 경우가 종종 있다.그런데 예를 들어 StackView의 경우 기본적으로 shadow를 넣을 수 없고 일반적인 뷰에 shadow를 적용하려고 해도 복잡해서 항상 찾아보게 되는 이런 상황이 싫어서 정리해보고자 한다.가장 먼저 Shadow를 적용하는 Extension 함수 만들기가장 고질적인 문제인 Shadow를 적용하는 방법을 가장 쉽게 하기 위해 CALayer Extension에 새로운 함수를 정의해준다.기본적인 함수 외형은 https://baechukim.tistory.com/112 [iOS] swift shadow 그림자 적용 (x, y, blur, spread) feat. Zeplin제플린 등에서 제공하는 그림자..
일을 하다보면, 그러니까 점점 비대해지는 이 프로젝트를 보고 있자면 가끔씩 갑갑한 마음이 들 때가 있다.그럴 때 마다 아 좀 더 유연하게 코드를 짤 수 없을까 라는 생각이 들기 마련이고 이럴 때 활용할 수 있는게 바로 프로토콜이 되겠다.나도 완전히 능숙하게 사용하지는 못하지만, 최대한 protocol을 활용하려고 노력 중이고, 왜 강력한 도구인지 소개하려고 한다.일단 Swift에서 기본적으로 제공하는 프로토콜들을 한 번 살펴보자EquatableEquatable 프로토콜은 두 인스턴스를 비교할 수 있도록 한다. == 연산자를 사용해서 두 객체가 같은지 비교할 때 사용한다. 직접 정의한 Classsk Struct에 Equatable 프로토콜을 추가하면, 해당 타입의 인스턴스들을 비교하는 로직을 구현할 수 ..
오늘은 저번에 이어서 UIKit 관련된 Extensions를 좀 활용해볼까 한다.은근 유용한 함수들이 많으니 응용해서 잘 써보도록 하자1. UILabel일단 소개하기에 앞서, 텍스트를 강조하기 위한 EmphasizedText라는 구조체를 만들었다.struct EmphasizedText { var text: String var font: UIFont var color: UIColor}이 EmphasizedText는 text와 font, color라는 property를 가지고 있고 이를 활용해 라벨의 Text를 조정할 예정이다.먼저 applyEmphasizedText라는 함수이다.extension UILabel { func applyEmphasizedText(fullText: Strin..
오늘은 업무하면서 Extension으로 선언해서 편리하게 사용했던 함수들을 소개해보려고 한다.1. Arrayextension Array where Element: Equatable { mutating func removeObject(obj: T) where T: Equatable { self = self.filter({ $0 as? T != obj }) }}말그대로 배열 내의 object를 지우는 기능이다.꽤나 편리하게 사용했던 기능 중 하나인데, 다만 중복되어 있어도 모든 object를 지우는 점만 유의하면 된다. 개꿀임 extension Array where Element: Equatable { mutating func removeDuplicates() { ..

라이센스 명시를 위해 작업을 하던 중, 앱 내에서가 아니라 앱의 설정부분에서 명시해주는 앱들이 있는걸 알게 되었다.해당 방법을 통해 좀 더 편리하고 깔끔하게 라이센스를 표시할 수 있으며, 효율적으로 관리할 수 있기에 방법을 소개하려고 한다!https://github.com/mono0926/LicensePlist일단 오늘 사용할 라이브러리는 LicensePlist로, Cocoapods 나 Carthage로 관리하는 라이브러리들의 라이센스 리스트를 추출해서 보여주는 라이브러리다.해당 라이브러리는 Cocoapods으로도 설치해서 실행할 수도 있지만, 난 그냥 homebrew를 통해 설치했다. brew install licenseplist 먼저 설치를 하고..내 프로젝트 경로로 이동해서 터미널에서 아래 명령어를..
이번에 Pod들의 전체적인 업데이트를 하면서 Alamofire의 메이저버전을 올리게 되었다. 그러면서 자연스럽게 오류가 생기고 이에 따른 문제를 해결하는 과정을 기록해보려고 한다. 첫 번째로, 기존의 Session Manager의 변경 부분이다. Network Request를 하기 위한 NetworkManager가 존재하는데, 코드는 다음과 같이 구성되어 있었다. (Alamofire 4) class NetworkManager { static let sharedInstance = NetworkManager() let manager: Alamofire.SessionManager = { let serverTrustPolicies: [String: ServerTrustPolicy] = [ liveDomainUR..

Apple이 본격적으로 개인정보에 관한 부분에 제동을 걸기 시작했다 이때까지는 크게 문제가 되지 않았으나, 3월13일 부터 배포를 위해 appstoreconnect에 올리고 심사를 제출하는 순간 해당 버전에 대한 xcprivacy 파일의 규격이 맞지 않는다고 메일을 보내온 것이다. 이 privacy manifest라는게 이번에 적용이 되는거라 생각보다 정보도 많이 없었고, 어떻게 작성해야하는지도 몰랐던 상황이기에 답답했지만, 애플 개발자 문서를 참고하며 하나씩 작성함으로써 해결을 했다. 결론부터 말하자면, 일단 메일을 확인한 순간, 메일의 warning에 대해서 조치를 취해주면 대부분 해결된다. 내 경우에는 Describing Use of Required Reason API에 대해 작성방법이 틀렸거나 작..
오랜만에 포스팅이네요,, 문득 일하던 중 API 요청을 하기 위해 필드의 값을 nullable하게 하는 것이 좋은 코드인가..? 아니면 값을 비워두거나, 필드 자체를 없애버리는게 좋은 코드인지에 대한 의문이 들었다 여기서 생각이 꼬리를 물고 Alamofire에서 API요청을 보내기 위해 필드에 nil값을 집어넣으면 어떻게 될지 궁금했다 예를들어 다음과 같은 json을 post하기 위해 서버로 Alamofire를 통해 보내보면... { "idx": "1" "name": "Thomas" "phone_number": nil "age": 29 } 결론적으로, Alamofire에서는 필드의 값이 nil일 경우 아예 필드자체가 없는 것으로 판단한다. 그런데 나는 회사 서버와의 상호작용간 특성상 파라미터를 Strin..