전체 글
배열의 값으로 index를 찾기.
배열의 값으로 index를 찾기.
2022.04.11struct Squad { let name: String // . // . // . } let platoon = [Squad(name: "Alpha"), Squad(name: "Bravo"), Squad(name: "Chalie"), Squad(name: "Delta") ] 이런 코드가 있고, 여기서 찰리분대의 Index를 찾고싶을때는.. 여태까지 저는 이렇게 처리 했습니다. var i = 0 while i < platoon.count && platoon[i].name != "Chalie" { i += 1 } if i < platoon.count { return i } else nil 조금 더 간결한 방법이 없을까 하고 찾아보니, 이런 방법이 있었습니다. let chalie = platoon.indice..
2021년 회고
2021년 회고
2021.12.24TL;DR 올 한해도 많은 아쉬움이 남는 해였습니다. iOS 개발자로 온전한 1년을 보냈고, RxSwift의 기본적인 개념정리, MVC, MVVM, MVP 패턴 겉 핥기 등 잡탕 개발자에서 주니어 iOS개발자스러운 개발자로 변해가는 부분에서 보자면 나름 성공적인것 같기도 하지만.. 제가 만족할만한 목표치를 채우지 못했습니다. 애초에 목표를 잡지 않고, 무작정 하고싶은걸 하고싶은 만큼만 하다보니 이렇게 된 것 같네요. 그래서 지금부터라도, 내년부터라도 변하기 위하여 회고를 작성합니다. 회사 올해는 정말 열심히 고도화(리팩토링?)를 한것 같습니다. 상반기에는 리뉴얼을 하면서 부분 리팩토링을, 하반기에는 CI / CD 도입을 위한 리팩토링을 진행하였습니다. 연초에는 기존의 App들을 전체적으로 리팩토링 하였는..
(프로그래머스) 괄호 회전하기
(프로그래머스) 괄호 회전하기
2021.11.30// 괄호 회전하기 // https://programmers.co.kr/learn/courses/30/lessons/76502 func turnParen(_ s:String) -> Int { var count = 0 var sArray = Array(s) var stack: [Character] if !pairCheck(sArray) { return 0 } // 짝이 안맞으면 카운트가 될수가 없으므로 0 반환. for _ in 0 ..< s.count { stack = [Character]() for c in sArray { if !stack.isEmpty && closeParen(stack.last!) == c { stack.removeLast() } else { stack.append(c) } } i..
(알고리즘) Implement, 구현
(알고리즘) Implement, 구현
2021.11.30오늘은 구현에 대해서 정리 해 보겠습니다. 구현 쉽게 말해 머릿속의 코드를 소스코드로 변환하는 과정입니다. 프로그래밍 처음 접하시는분들 이게 참 어렵죠.. 소스코드를 떠나서, 머릿속에 어렴풋이 떠오르는 방법을 논리적으로 명시한다는게 쉽지는 않은데요, 구현에 대한 연습은 간단합니다. 요새는 대학교에가면, 전공자가 아니더라도 알고리즘을 배운다고 하던데.. 저는 예전에 이렇게 공부했습니다. 방법 설계 -> 플로우차트 -> NS차트 -> 소스 구현 NS차트까지도 굳이 필요할까 싶습니다. 초보자분들도 체계적으로 플로우차트 그리는 연습을 하다 보면, 금방 숙달이 될거에요. 그럼 책에 나온 몇가지 문제 풀이를 공유하겠습니다. 상하좌우 여행가 A는 N x N 크기의 정사각형 공간 위에 서있다. 이곳은 1X1 크기의 정..
(알고리즘) Greedy, 탐욕법
(알고리즘) Greedy, 탐욕법
2021.11.26요즘 부쩍 알고리즘에 관심이 생겼습니다. 그래서 책을 한권 사서 보고 있는데요, 이것이 취업을 위한 코딩 테스트다 with 파이썬 나동빈님이 출간하신 이것이 취업을 위한 코딩 테스트다 라는 책을 보고 있습니다. 고르는데 딱히 뭔가 기준이 있었던건 아니고, 저는 ebook을 좋아해서, yes24를 가장 많이 사용하는데요. yes24에서 알고리즘으로 검색하면 코딩 알고리즘 관련 도서중 가장 위에 나옵니다. 네.. 별생각 안하고 샀어요.. (뭐든지 일단 해보는게 중요하죠 ㅠ) 그래서 1장에 소개되어 있는 그리디 알고리즘을 조금 풀어 보았습니다. 물론 iOS개발을 하고 있으니 Swift로 풀어 보았습니다. 온라인채점이 불가능해서 효율이 어떤지는 잘 모르겠지만.. 그래도 일단 푼게 아까워서 공유합니다 ㅎㅎ htt..
RxSwift 결합 함수 정리
RxSwift 결합 함수 정리
2021.07.04오늘은 Combine계열 함수들을 정리해보려고 합니다. 포스트들을 보니, Filter, Mapping 계열 함수들을 공부만해놓고 포스팅하진 않았네요.. 이것들도 조만간 포스팅하겠습니다.. StartWith 시퀀스를 방출하기 전, 특정 요소를 방출하기 위한 함수입니다. example(of: "startWith") { let numbers = Observable.of(2, 3, 4) let observable = numbers.startWith(1) observable.subscribe(onNext: { print($0) }) /* Prints: 1 2 3 4 */ } 2,3,4만 방출하도록 하지만, startWith를 이용하면, 해당 요소를 먼저 방출한 후 방출합니다. 특이한 점은, Cold Observa..
addSubview 한번에 하기
addSubview 한번에 하기
2021.06.03SnapKit이나, SwiftUI등으로 스토리보드 없이 UI를 개발할때 addSubview를 쓸일이 많습니다. 다만 종종 이렇게 노가다가 될수도 있는데요.. view.addSubview(thumbnailView) view.addSubview(closeButton) view.addSubview(likeButton) view.addSubview(titleLabel) view.addSubview(subTitleLabel) 이 코드를 한줄로 줄여주는 간단한 익스텐션입니다. view.addSubviews([thumbnailView, closeButton, likeButton, titleLabel, subTitleLabel])
RxSwift Trait
RxSwift Trait
2021.05.26(스터디하면서 공부한 자료를 정리하였습니다) RxSwift에는 여러가지 trait들이 있는데요, 간혹 인터넷에서 RxSwift자료를 찾다보면 예시로 보통 Observable과 BehaviorSubject로 나옵니다. 저는 거기에 대한 의문점을 가지게 되었습니다. 왜 꼭 Observable과 BehaviorSubject만 사용을 해야할까? 다른 trait들을 사용할수는 없었을까? (=그것이 최선이었을까?) 이런 의문점이 생겨서, trait들을 찾아보았습니다. RxSwift에서 사용되는 trait들은 이정도가 있더라구요. RxSwift Observable Single Completable Maybe Infallible RxCocoa Driver Signal Subject PublishSubject Behav..
Playground로 RxSwift 공부하기.
Playground로 RxSwift 공부하기.
2021.05.21몇가지방법들을 찾아보았습니다. 프로젝트를 만들고, SPM이나 Cocoapods로 RxSwift를 추가하기. RxSwift 리포지토리를 다운받아서, 거기에 있는 Playground로 테스트하기 등등. 근데 Arena라고 오픈소스 프로젝트가 있는데요, SPM을 포함한 Playground 생성 툴입니다. https://github.com/finestructure/Arena finestructure/Arena A command line tool to create Swift Playground projects with SPM package dependencies - finestructure/Arena github.com 제일 간편하더라구요. brew install finestructure/tap/arena bre..
fastlane - 빌드넘버 Date로 커스텀
fastlane - 빌드넘버 Date로 커스텀
2021.05.17fastlane은 루비로 개발하였습니다. fastfile에서 루비 언어를 이용하여 커스텀할 수 있습니다. 저는 fastlane에 testflight 업로드 스크립트를 만들어 두었는데요, 아래 함수를 조금 더 추가하여 날짜+카운팅 방식으로 변경하였습니다. (2021051701, 2021051702, 2021051703 ... 2021051799) default_platform(:ios) platform :ios do desc "Push a new beta build to TestFlight" lane :beta do increment_build_number(xcodeproj: "Project.xcodeproj", build_number: date_based_build_number) build_app(sch..
배열의 오버플로우, 언더플로우를 방지하는 방법.
배열의 오버플로우, 언더플로우를 방지하는 방법.
2021.05.10인터넷에서 좋은 글을 보고 가져왔습니다. (번역은아니고, 공감하는대로..) 출처 : levelup.gitconnected.com/5-swift-extensions-to-write-smarter-code-7287b86fde68 Swift에서 배열을 쓰다보면, 보통은 오버플로우가 나는 경우가 많습니다. let values = ["A", "B", "C"] values[0] // A values[1] // B values[2] // C values[3] // Fatal error: Index out of range 이와 비슷한 코드에 관한것을 많은 개발자분들이 경험해 보셨을겁니다. 그래서 오버플로, 언더플로를 방지하기위해 많이 노력합니다. (보통은 오버플로겠죠..) if 2 < values.count { val..
[RxSwift + MVVM] 1. iOS의 모바일 아키텍처 패턴
[RxSwift + MVVM] 1. iOS의 모바일 아키텍처 패턴
2021.05.021. 아키텍처 패턴이란? 소프트웨어 공학은 건축 공학을 많이 모방하여 연구되었습니다. 기본적으로 계획 - 설계 - 시공이 건축이라면, 계획 - 설계 - 구현이 소프트웨어 개발이겠죠. 아키텍처 패턴은 설계항목에 들어가는 방법론입니다. 위키피디아에서는 이렇게 설명되어 있습니다. 아키텍처 패턴(architectural pattern)은 주어진 문맥 안에서 소프트웨어 아키텍처의 공통적인 발생 문제에 대한 일반적인, 재사용 가능한 해결책을 의미한다. 아키텍처 패턴은 소프트웨어 디자인 패턴과 비슷하지만 더 넓은 범위에 속한다. 아키텍처 패턴은 소프트웨어 공학의 다양한 문제를 해결하는데, 예를 들어 컴퓨터 하드웨어 성능 제한, 비즈니스 위험의 최소화와 고가용성을 들 수 있다. 일부 아키텍처 패턴은 소프트웨어 프레임워..