IOS/Swift
알고리즘 풀 때 자주 쓰는 몇가지 테크닉
알고리즘 풀 때 자주 쓰는 몇가지 테크닉
2022.05.161. 배열 순회중, 오버플로우 체크 if (0 .. Bool { for number in 2 ... at / 2 { if at % number == 0 { return false } } return tru..
UIColor Custom
UIColor Custom
2022.05.11뷰를 개발하다보면, UIColor를 사용할일이 정말 정말 많습니다. 이를 좀 더 편하게 사용하기 위한 커스텀 코드를 몇번 작성하다보니, 정리가 필요하겠구나 싶어 포스팅 합니다. HTML 삽입 미리보기할 수 없는 소스 위와 같은 코드를 작성하게되면, 아래와 같이 편하게 UIColor 값을 조절할 수 있습니다. myLabel.textColor = UIColor(0, 0, 0) myLabel.textColor = UIColor(rgb: 0x000000) 그리고 추가적으로 조금 더 들어가서.. 각 뷰의 색상값을 아래처럼 정의해두면 조금 더 가독성이 높은 코드가 완성 되겠죠 extension UIColor { static let titleColor: UIColor = { UIColor(rgb: 0x000000) ..
배열의 값으로 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..
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..
배열의 오버플로우, 언더플로우를 방지하는 방법.
배열의 오버플로우, 언더플로우를 방지하는 방법.
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..
Swift에서의 JSON 파싱
Swift에서의 JSON 파싱
2020.11.26실무에서 앱을 개발하면서, 네트워크를 사용하지 않는 앱을 만드는 경우는 드문것 같습니다. 흔히 서버와 통신을 하면서, 요새는 웹 JSON으로 많이 데이터를 받으며, 보통 RestAPI를 이용해서 데이터 전송을 많이 하는데요. 현실적으로 Swift 개발자는 맥이라는 장벽 때문에 다른 언어에서 Swift로 옮겨오는 경우가 많아서, 보통 Java나 C# 좀 더 올라가면 C, C++등등 언어에서 옮겨올텐데요, C#같은 경우에는 요즘 최신 버전이 Json 파싱을 지원해준다고 들었습니다만, 한 3년 전 까지만해도Json.Net 이라는 외부 라이브러리를 많이 이용했던 경험이 생각 납니다. 그래서 Swift를 예전에 처음 공부할 때에도 Json과 통신할 일이 있으면 가장 먼저 Github에서 Json라이브러리를 찾아보..
guard let과 if let의 차이
guard let과 if let의 차이
2018.07.20새로 나오는 언어들 대부분은 무수히 많이 일어나는 NULL Execption 오류를 피하기 위하여, Optional 에 관한 기법을 지원을 합니다. Swift도 예외는 아닙니다. 가장 대표적으로 if let과 guard let이 있습니다. myClassArray라는 MyClass 배열의 값 하나를 꺼내온다고 쳤을때, 두 문법을 한번 살펴보겠습니다. func getMyClass(myClassArray: [MyClass], index: Int) -> MyClass{ if let myClass = myClassArray[index]{ //블록 안에서만 myClass를 사용 가능 하다 return myClass } else { //nil 오류가 날 시, 빈 myClass를 리턴한다 return myClass()..