Coding/스위프트 Vapor 코딩 알고리즘 2021. 3. 26. 20:01
Swift에서 Vapor를 사용해보고 제일 먼저 해본 것이 데이터베이스를 연결해 본 것입니다. 우선 PostgreSQL은 잘 동작하는 것 같고 Vapor를 주로 테스트 용도로 사용할 생각이라서 MongoDB를 연결이 필요했습니다. 방식은 거의 비슷합니다. 모두 Fluent라는 라이브러리를 사용합니다. Vapor Docs 문서에 아주 상세히 기술되어 있으나 막상 문서만 보고 해 보면 막히시는 분들이 많을 것 같아 테스트해본 내용을 포스팅합니다. 목차 MongoDB 연결하기 모델 만들기 POST 요청 만들기 POSTMAN 테스트 MongoDB 연결하기 ▼ 1. 두 개의 [ Fluent, ,FluentMongoDriver ] 라이브러리를 Package.swift 에 추가해줍니다. 처음 프로젝트를 생성하면 va..
더 읽기
Coding/스위프트 Vapor 코딩 알고리즘 2021. 3. 25. 21:11
어제 처음으로 Vapor라는 프레임워크를 알게 되었습니다. 그동안 Perfect VS Vapor VS Kitura VS Node.js 같은 유사한 글들은 많이 봤어도 크게 관심은 없었습니다. 하지만 이번에 Vapor를 우연히 알게 되었고 재미있게 써보고 있습니다. 클라이언트 개발자나 iOS 개발자들은 서버에 대한 지식이 부족하기 마련입니다. 저 역시 마찬가지여서 그나마 사용하기 편리한 Express 또는 Koa로 웹 서비스를 구축합니다. 요즘은 타입스크립트 같은 것도 있고 Visual Studio Code 같은 것들도 있지만 전문가가 아니고서는 생각보다 디버깅하기가 힘듭니다. 스위프트는 이와 달리 매우 정교함이 있죠. 이런 우하함이 서버에 적용되면 좋을 것 같다는 생각을 매번 하다가 Vapor를 알고 새..
Coding/스위프트 UI 코딩 알고리즘 2021. 2. 11. 16:14
오늘은 지난 시간에 이어서 스위프트 UI를 이용해 간단한 화면 구성을 해보겠습니다. Swift 나 오토레이아웃(AutoLayout) 으로 디자인하는 것보다 훨씬 간단합니다. 만약 오토레이아웃을 사용해본 적이 있다면 스택 뷰(StackView)를 사용해 봤을 텐데요. 스택뷰만 잘 이해하고 있다면 조금 쉬울 수 있습니다. Swift UI의 장점은 아무래도 코드를 재사용하기 쉽다는 것과 Github를 이용해서 다른 사람과 서로 충돌 없이 작업할 수 있어서 좋을 것 같습니다. 그럼 간단하게 지금까지 배운 지식으로 날씨 정보 뷰를 만들어 보겠습니다. 프로젝트 생성 ▼ 1. Weather 라는 iOS SingleView Project를 만들겠습니다. 언어는 Swift로 설정합니다. ▼ 2. 기존 코드 위에 새로 W..
Coding/스위프트 iOS 코딩 알고리즘 2020. 10. 21. 21:32
onevcat/Kingfisher A lightweight, pure-Swift library for downloading and caching images from the web. - onevcat/Kingfisher github.com 고급 사용법 다음은 다운로드 핸들러를 포함한 이미지 다운로드 예시입니다. let iv = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) let url = URL(string: "https://raw.githubusercontent.com/onevcat/Kingfisher/master/images/logo.png") let processor = DownsamplingImageProcessor(size: ..
Coding/스위프트 iOS 코딩 알고리즘 2020. 8. 28. 11:09
1. 기본값 설정 서버에서 온 값이 nil 이 들어오면 보통 옵셔널로 설정합니다. 하지만 매번 사용할때 옵셔널에서 일반 타입으로 변경하는게 귀찮을 때 다음과 같이 init 함수에서 기본값을 설정해주면 옵셔널이 없는 일반 struct 처럼 사용 가능합니다. struct param: Codable { var key: String var value: String private enum CodingKeys: String, CodingKey { case key, value } init(from decoder: Decoder) throws { let values = try decoder.container(keyedBy: CodingKeys.self) key = (try? values.decode(String.sel..