-
Swift MVVM(작성중)
스탠포드 대학 CS193p 강의 중 MVVM 관련 내용을 번역하며 정리해봄 Model-View-ViewModel 코드를 구성하는 아키텍쳐의 디자인 패러다임의 하나이다. “반응형” 유저인터페이스 개념과 함께 작동하며, SwiftUI를 학습하기 전에 선행되어야 하는 개념이다. UIKit을 사용하는 구식 스타일 iOS의 MVC와는 다르다. MVVM은 모델과 뷰를 분리하려고 한다는 점에서 MVC와 비슷한 면이 있다. 모델과 뷰를 먼저 살펴본 후 MVVM이 이 두 요소를 어떻게 연결하는지 알아보도록 하자. Model 과 View Model 모델은 UI 독립적이다. 모델은 SwiftUI를 사용하지 않는다. (UIKit도) 모델은 데이터와 로직을 캡슐화 한다....
-
qtfaststart in Swift
mp4 파일중 스트리밍이 지원되지 않는 파일이 존재하였고, 이를 최적화 시켜주는 C라이브러리를 Swift로 컨버젼했음 Mp4 atoms mp4 파일 중 스트리밍이 되지 않는 파일들이 존재하는데, 이는 mp4 파일을 구성하는 요소인 atom 배치에 따른 것이었다. 데이터를 담고있는 mdat atom과 데이터에 대한 정보를 담고 있는 moov atom의 순서에 따라 스트리밍 가능 / 불가능 여부가 결정되는데, 스트리밍이 가능한 mp4는 moov atom이 mdat atom보다 앞에 배치되어 있었고, 스트리밍이 불가한 mp4는 moov atom이 파일의 가장 뒷부분에 붙어있었다. 이를 수정하여 mp4를 스트리밍해줄 수...
-
Arrange Multi-line UILabel in UIStackView with SnapKit
Multi Line UILabel을 UIStackView 안에서 정렬하기 위한 방법 정리 방법 UILabel을 UIView안에 넣고, UIView를 UIStackView에 넣으면 된다. 코드 class ExampleView: UIView { private lazy var titleLabel = UILabel() private lazy var contentLabel: UILabel = { let label = UILabel() label.numerOfLines = 0 return label }() private lazy var contentView: UIView = { let view = UIView() view.addSubview(self.contentLabel) return view }() private lazy var spacer: UIView = { let view = UIView() view.setContentHuggingPriority(.defaultLow, for: .horizontal) return...
-
[Swift-Design Pattern] 데코레이터 패턴 (Decorator pattern)
데코레이터 패턴이란 객체간 결합을 통해 기능을 유연하게 확장할 수 있도록 돕는 디자인 패턴이다. 예시 네비게이션의 도로 표시 방식을 통해 데코레이터 패턴을 학습해 본다. AS-IS 도로 표시 클래스 class RoadDisplay { func draw() { print("기본 도로 표시") } } draw()를 이용해 기본적인 도로만 표시하는 클래스이다. 도로 + 차선 표시 클래스 class RoadDisplayWithLane: RoadDisplay { override func draw() { super.draw() self.drawLane() } private func drawLane() { print("+ 차선 표시") } } draw()를 호출하면 차선도 함께 표시해주는 클래스이다....
-
[Swift-Design Pattern] 커맨드 패턴 (Command pattern)
Command Pattern은 실행될 기능을 추상화, 캡슐화 하여 한 클래스에서 여러 기능을 실행할 수 있도록 하는 패턴이다. 예시 여러 기능을 수행할 수 있는 버튼 클래스를 만들며 커맨드 패턴을 익혀본다. AS-IS 버튼 클래스와 램프 클래스 class Lamp { func turnOn() { print("Lamp On") } } class Button { private let lamp: Lamp init(lamp: Lamp) { self.lamp = lamp } func pressed() { self.lamp.turnOn() } } Button을 생성할 때 lamp를 인자로 전달받도록 작성되었다. 클라이언트 let lamp = Lamp()...
-
[Swift-Design Pattern] 옵저버 패턴 (Observer pattern)
Observer Pattern은 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동 되도록 1 대 N 객체간 의존 관계를 구성하는 디자인 패턴이다. 예시 점수 저장소인 ScoreRecord 클래스와 점수를 출력하는 View 클래스를 이용해 옵저버 패턴을 이해해 본다. AS-IS 점수 저장 클래스 class ScoreRecord { private var scores = [Int]() private var dataSheetView: DataSheetView? func setDataSheetView(dataSheetView: DataSheetView) { self.dataSheetView = dataSheetView } func addScore(_ score: Int) { self.scores.append(score) self.dataSheetView?.update() } func getScoreRecord() -> [Int] { return self.scores }...
-
[Swift-Design Pattern] 싱글톤 패턴 (Singleton Pattern)
Singleton Pattern은 객체를 하나만 생성하여, 생성된 객체를 어디서든 참조할 수 있도록 하는 패턴이다. Thread-safe 하게 작성하여 멀티스레드에서 사용해도 문제가 없어야 한다. JAVA와는 다르게, Swift에서는 간결하게 구현이 가능한 듯 하다. 코드 클래스 class Printer { static let shared = Printer() private init() {} func printDoc(_ doc: String) { print(doc) } } static 변수에 Singleton 패턴을 적용할 클래스의 인스턴스를 할당해주면 된다. 클라이언트 Printer.shared.printDoc("Print Document") 클라이언트에서는 Printer 클래스의 shared 변수를 불러와 사용하면 된다.
-
[Swift-Design Pattern] 스트래티지 패턴 (Strategy pattern)
Strategy Pattern은 클래스의 행위를 캡슐화 하여 동적으로 행위를 자유롭게 바꿀 수 있도록 돕는 패턴이다. 예시 로봇 프로토콜과 그것을 따르는 태권V, 아톰 객체를 생성하는 예시를 통해 스트래티지 패턴을 학습해본다. AS-IS Robot 클래스 protocol Robot { var name: String { get } init(name: String) func attack() func move() } class TaekwonV: Robot { var name: String required init(name: String) { self.name = name } func attack() { print("I launch Missle") } func move() { print("I can only...
-
[Swift-Design Pattern] 스위프트를 이용한 디자인 패턴
Swift를 이용한 디자인 패턴 JAVA로 되어있는 GoF 디자인 패턴 책을 스위프트로 바꿔가며 공부해보도록 한다. 스트래티지 패턴 (Strategy Pattern) 싱글톤 패턴 (Singleton Pattern) 옵저버 패턴 (Observer Pattern) 커맨드 패턴 (Command Pattern) 데코레이터 패턴 (Decorator Pattern) Reference JAVA 객체지향 디자인 패턴(한빛미디어) 디자인 패턴 종류 (in JAVA)
-
스위프트로 블록체인 구현하기
요즘 암호 화폐가 이슈이다. 암호 화폐 기술의 근간은 블록체인이며, 이 블록체인은 4차 산업혁명을 이끌어 나갈 기술이라고 평가된다. 그러나 많은 사람이 블록체인이 무엇인지, 어떻게 구동되는지 알지 못한다. 어떤 개념을 이해하는데 가장 확실한 방법은 직접 만들어보고 체험해보는 것이라고 생각한다. 이 포스팅을 통해 Swift를 사용하여 블록체인을 직접 구축하며 블록체인의 원리를 이해해보고자 한다. 블록체인은 요즘 이슈가 되는 암호화폐인 비트코인의 근간이 되는 기술이다. 블록체인의 핵심 가치는 중앙에 의해 제어되지 않는 분산된 원장(Ledger)을 제공하는 것이다. 이 포스팅에서는 iOS/MacOS를 바탕으로 Swift 언어를...
-
[Project] 암호화 시세조회 앱 (iOS)
Swift를 이용해 암호화폐 실시간 시세와 한국 프리미엄을 조회할 수 있는 앱을 개발했습니다. Language : Swift Library : Alamofire / SwiftyJSON / SnapKit 기타 : Xcode, git 소스코드 스위프트와 Alamofire, SwiftyJSON 라이브러리를 이용해 암호화폐 거래소인 UpBit와 Bittrex의 실시간 시세 정보를 알려주는 애플리케이션을 개발하였습니다. 또한, Today Extension을 사용해 위젯을 통해 시세를 조회할 수 있는 기능을 더했습니다.
-
[Project] Cryptocurrency Price Ticker App (iOS)
I developed an app that display real time price ticker information of cryptocurrencies and Korea premiums. Language : Swift Library : Alamofire / SwiftyJSON / SnapKit ETC : Xcode, git Source Code I developed an application that shows the real-time cryptocurrencies price ticker information of UpBit and Bittrex using Swift, Alamofire and SwiftyJSON Libraries. Also, I added function that display ticker information in iOS widget using Today Extension.
-
Core ML 과 Vision: iOS11의 머신러닝 튜토리얼
출처 : Core ML and Vision: Machine Learning in iOS 11 Tutorial iOS11에서 새로이 업데이트 되는 머신러닝 기술인 Core ML과 Vision을 활용하는 적절한 튜토리얼이 있어 번역하며 공부해본다. 이 튜토리얼은 Xcode 9 Beta 버전 그리고 Swift4 와 iOS11 에서 정상작동한다. 머신 러닝의 인기가 대단하다. 많은 사람들이 그것에 대해 들어보았겠지만, 정확히 무엇을 이야기하는지 아는 사람은 그리 많지 않다. 이 튜토리얼은 Core ML과 Vision이라는 iOS11에서 처음 수개 된 프레임워크에 대해서 설명하고 있다. 특히 이미지의 장면을 분석하기 위해 Places205-GoogLeNet이라는...
-
Swift 기초 - 특징, 변수, 상수, 타입
출처 : SWIFTER 블로그 Swift에 대한 기본 개념을 정리하며 공부해본다. 스위프트의 특징 변수, 상수, 타입 변수와 상수 Bool 타입 Numeric 타입 String 타입 Array<Element> 타입 Dictionary<Key, Value> 타입 Optional<Wrapped> 타입 Any 타입 튜플 타입 타입 캐스팅 스위프트의 특징 Swift는 정적인 프로그래밍 언어이다. 정적 프로그래밍 언어란, 컴파일 등 프로그래밍 언어가 실행되기 이전 단계에서 변수/상수의 타입을 결정하는 언어를 의미한다. 정적인 언어는 동적 언어와 비교해 실행이 되기 전에 프로그램의 타당성이 검증되기 때문에 안정성이 높으며, 대규모 프로그램 개발에 적합하다는...