SWIFT

디자인 패턴

[디자인패턴] 싱글톤

싱글톤 패턴(Singleton pattern) 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 class NetworkService { static let shared = NetworkService() private init() {} } 스위프트에서는 static let으로 객체의 인스턴스를 할당해주면 끝. 그리고 인스턴스가 추가로 생성되는 것을 방지하기 위해 init()함수의 접근제어자를 private로 선언한다. 보통 데이터베이스나 네트워크등 서비스 모듈에 많이 사용합니다. 싱글톤 패턴의 장단점 장점 인스턴스를 최초 1회만 생성하므로 메모리와 성능 측면에서 효율이 좋다. 전역 인스턴스로 다른 모듈 및 클래스간 데이터 공유가 쉽고 접근이 쉽다. 단점 전역으로 어디서든 접근 하여 안티패턴으로 불릴수 ..

iOS

[iOS] 애플 로그인 사용해보기(Sign in with Apple)

Sign in with Apple은 iOS 13이상 부터 사용가능한 새로운 인증 방법입니다. 단계별로 Sign in with Apple 사용법에 대해 알아 보도록 하겠습니다. AppleIDButton 설정 먼저 AuthenticationServices를 import 해야 됩니다. ASAuthorizationAppleIDButton를 이용해서 type 및 style을 지정해줍니다. import UIKit import AuthenticationServices class ViewController: UIViewController { @IBOutlet weak var loginStackView: UIStackView! override func viewDidLoad() { super.viewDidLoad() se..

Swift

[Swift] Codable - Decoding 방법

이전 포스트는 Codable의 Encodable에 대해 알아 보았습니다. 이번 포스트는 Codable의 Decodable에 대해 알아보도록 하겠습니다. Decodable JSON 데이터를 디코딩 하는 방법에 대해 알아보도록 하겠습니다. Decodable을 이용하면 JSON을 쉽게 처리할 수 있습니다. # 디코딩 방법 decode 메서드는 두개의 파라미터가 필요합니다. 첫번째 파라미터는 디코딩할 타입을 정의한다. 반드시 Decodable이나 Codable 프로토콜을 채택해야됩니다. struct Person: Codable { var name: String var age: Int var birthDate: String var address: String? } 두번째 파라미터에는 json이 저장되어있는 dat..

Swift

[Swift] Codable - Encoding 방법

이번 포스트는 Codable의 Encodable에 대해 알아 보도록 하겠습니다. 먼저 애플의 문서를 확인해보면 💡 A type that can convert itself into and out of an external representation. 외부 표현으로 변환하거나 외부 표현으로 변환할 수 있는 유형이라고 하는데 쉽게 이야기하자면, 자신을 외부 표현으로 인코딩할 수 있고, 자신을 외부 표현으로 부터 디코딩할 수 있다는 이야기입니다. 주로 JSON을 이용할 때 사용되기 때문에 외부 표현을 JSON데이터로 생각하면 더 쉽게 이해가 될것 같습니다. public typealias Codable = Decodable & Encodable Codable은 Encodable과 Decodable로 이루어져 있습..

iOS

[iOS] Autolayout으로 제약조건을 걸었을때 Animation 방법

Autolayout을 이용한 animation 방법에 대해 알아 보도록 하겠습니다. 제약 조건이 걸렸을때의 애니미에션을 어떻게 처리하는지에 대해 간단히 알아보기위해 아래와 같은 스토리보드 화면의 X,Y가 Center잡혀 있고, 크기가 50으로 제약이 걸려있습니다. view의 사이즈가 증가하는 간단한 애니메이션으로 확인 해보겠습니다. iOS Animation 방법(UIView.animate) iOS Animation 방법(UIView.animateKeyframes) 기존에 위의 포스트 방식대로 frame의 애니메이션을 구현하는 방식대로 해보도록 하겠습니다. view의 사이즈를 200만큼 증가 @IBOutlet weak var objectView: UIView! @IBOutlet weak var widthC..

iOS

[iOS] Animation 방법(UIView.animateKeyframes)

Keyframe Animation 이번 포스트는 애니메이션의 연속적인 처리에 유용한 keyframe에 대해 알아 보도록 하겠습니다. 지난 포스트는 UIView.animate를 이용해서 애니메이션을 구현하는 방법에 대해 알아보았습니다. 간단한 애니메이션같은 경우에는 충분히 커버가 가능하지만, 순차적으로 애니메이션들이 진행된다고했을때, 아래와 같이 completion 클로저를 이용해서 애니메이션을 구현해야됩니다.(콜백지옥...) UIView.animate(withDuration: 1, animations: { animate1() }, completion: { finished in UIView.animate(withDuration: 1, animations: { animate2() }, completion: ..

iOS

[iOS] Animation 방법(UIView.animate)

iOS에서 자주 사용하는 애니메이션은 크게 2가지가 존재합니다. UIKit을 이용한 UIView의 API Core Animation을 이용한 API 이번 포스트에선 1번 UIView의 API에 대한 기본 사용법, Spring애니메이션, 여러가지 애니메이션 옵션들에 대해 알아 보도록 하겠습니다. iOS 2부터 절차적으로 사용되던 애니메이션(beginAnimations, commitAnimations)은 iOS13에서 deprecated되었고, iOS 4부터는 Closure형태인 animate메서드를 주로 이용해왔습니다. 하지만! 여전히 많이~ 사용되고 있지만 이 메서드도 언젠간 deprecated될 것 같습니다. 💡 Use of these methods is discouraged. Use the UIVie..

iOS

[iOS] iOS13 Modal Style 및 Life Cycle

iOS13에도 많은 변화가 있었죠? 지난 포스트에는 변경 사항에 대한 이슈들을 정리해보았으니 미처 못보신 분들은 보시고 추가해야될 사항있으면 댓글 환영합니다. :) 많은 변화 가운에 이번 포스트에는 Modal의 라이프 사이클에 대해 적어보려고합니다. 💡Modal Presentation Style iOS13부터 Modal presentation Style의 디폴트 값이 full screen이 아닌 'automaic'으로 변경되었습니다. XCode11업데이트 후 13.0으로 빌드 해보니 모달 형식이 아래와 같이 'page sheet'형태로 나타나는걸 볼 수 있으셨을 겁니다. 그렇다면 automatic은 무엇일까요? 세로화면에선 page sheet, 가로화면에선 full screen형태의 타입을 나타냅니다! ..

iOS

[iOS] 13 이슈 대응 및 변경 사항 공유

안녕하세요. iOS13 대응을 진행하면서 몇 가지 변경사항 및 급한 불을 끌 수 있는 이슈 방안에 대해서 적어보려고 합니다. 💡KVC 금지 *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Access to UISearchBar's _searchField ivar is prohibited. This is an application bug' *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Access to UITextField's _placeholderLabel ivar is prohibited. This is an applicat..

RxSwift

[RxSwift] filter vs skip operator

Rx의 감을 되찾기 위해 Operator들을 정리하려고 합니다. 먼저 이번엔 특정 조건이 맞으면 이벤트를 발생시키는 메서드들에 대해 알아보도록 하겠습니다. filter 조건이 맞는(참) 이벤트만 발생한다. 짝수만 이벤트를 발생하는 예제 let disposeBag = DisposeBag() let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Observable.from(numbers) .filter { $0.isMultiple(of: 2) } .subscribe { print($0) } .disposed(by: disposeBag) /* 출력 next(2) next(4) next(6) next(8) next(10) completed */ skip 정수를 파라미터로 받고, 지정..

jinnify
'SWIFT' 태그의 글 목록