iOS 60

[iOS / UIKit] How to change UIPickerView Selected Background Color

안녕하세요! 오늘 다뤄볼 주제는 UIPickerView의 Selected Row 색상을 변경하는 것입니다! 위 시뮬레이터에서 보여지는 뷰들에 대한 코드를 먼저 보여드리겠습니다! BEFORE 코드로 보시는 바와 같이 색상에 대해 별도로 설정해준 것이 없음에도 불구하고 아래와 같이 배경색이 설정되어 있는 게 보입니다. 아마 여러분들은 여러분들이 원하는 디자인이 따로 있으시겠지요? 백그라운드 색상을 변경해 봅시다! AFTER (System Yellow Color) 48~50번 Line의 Code를 주목해 주세요! 아마 높은 확률로 여러분은 아예 저 배경색을 지워버리고 싶으실 겁니다. Clear 색상을 적용해 봅시다! AFTER (Clear Color) 48~50번 Line의 Code를 주목해 주세요! 전체 C..

iOS/UIKit 2023.03.02

[iOS / UIKit] How to send email Swift

How to send email Swift 안녕하세요! 오늘은 iOS앱 개발 과정에서 Email 기능을 구현하는 방법을 알아봅시다! + Email에 파일을 첨부하는 방법도 함께 알아봅시다! 바로 전체 코드를 보여드리겠습니다! Email 기능을 활용하려면 Mail 앱에 계정이 등록되어 있어야 합니다! Mail 앱에 계정이 등록되어 있어야 if MFMailComposeViewController.canSendMail() 조건문에서 true를 받을 수 있습니다! GitHub 링크입니다! https://github.com/TDCIAN/SendEmailWithSwift GitHub - TDCIAN/SendEmailWithSwift Contribute to TDCIAN/SendEmailWithSwift develop..

iOS/UIKit 2023.02.13

[iOS / UIKit] How to use PreviewProvider in UIKit

How to use PreviewProvider in UIKit 안녕하세요! 오늘은 UIKit에서 PreviewProvider를 사용하는 방법을 알아봅시다! PreviewProvider는 SwiftUI에서만 사용할 수 있는 게 아닌가 생각하실 수 있겠지만 UIKit에서도 활용할 수 있습니다! 일단 사진부터 보시죠! PreviewProvider 부분만 확대해서 다시 보여드리겠습니다! 전체 코드도 보여드리겠습니다! UIKit 상황에서 개발한다고 하더라도 PreviewProvider를 활용하시려면 반드시 SwiftUI를 import 해주셔야 합니다! 맥북 성능에 따라 PreviewProvider를 사용하시는 게 시뮬레이터나 실기기를 활용하는 것보다 유리할 수도 있고, 그러지 못할 수도 있으니 현재 상황에 맞춰..

iOS/UIKit 2023.02.12

[Swift] 맵 삼형제(map, flatMap, compactMap)에 대해 알아봅시다

(1) map 애플 개발자 홈페이지에 있는 map에 대한 설명입니다. 배열 내부의 요소들을 매핑해서 돌려준다네요! 그런데 mapping이 뭘까요? 구글에 물어봅시다. 역시 명쾌하다! 구글! 여기 말고 이번에는 해시넷에서 봅시다(블록체인 관련된 정보들이 참 많습니다). 아까보단 훨씬 낫죠? 그래도 이해가 잘 안 될 수 있습니다. 코드로 보시죠! 바로 감이 오시나요? numbers 배열의 각 요소에 1을 더한 애들을 배열에 담아 보여 줍니다. 다른 예시를 한 번 들어볼까요? 아까 사용했던 numbers를 그대로 사용하는데, 이번에는 numbers 내부의 각 요소를 String 타입으로 활용해봤습니다. 이렇게 축약해서 쓸 수도 있습니다. 이번에는 한 번 스까서 써볼까요?? numbers의 각 요소에 3을 더한..

iOS/Common 2022.06.10

[Swift] 고차함수(map, filter, reduce)를 스윽 핥아봅시다

고차함수(Higher-order function)는 다른 함수를 전달인자로 받거나, 함수 실행의 결과를 함수로 반환하는 함수를 뜻합니다! Swift의 함수(클로저)가 일급시민이므로 함수의 전달 인자로 전달할 수 있고, 함수의 결괏값을 반환할 수 있습니다. 고러면 바로 고차함수 map, filter, reduce에 대해 알아봅시다! (1) map map은 뭘까요? 내부의 요소들을 변경(변형이 좀 더 정확합니다)해서 이를 담아 돌려주는 것입니다. 바로 봅시다! 감이 잡히시나요? Numbers 배열 내부에 있는 각 요소에 대하여 mapNumbers1에서는 1을 더해주었고, mapNumbers2에서는 아예 String으로 변환하여 사용해주고 있습니다. 이런 식으로 축약해서 사용할 수도 있습니다. 심지어 섞어 쓸..

iOS/Common 2022.06.08

[Swift] final 왜 막 갖다 붙이나요? (feat. vtable, dynamic dispatch)

우리가 코드를 짜다 보면 이렇게 final 키워드를 붙여서 쓰는 경우가 있잖아요?(반박할 시 코 쓱 닦음) 다른 사람들이 쓰니까 일단 따라 쓰긴 하는데, 이거 왜 쓰는 걸까요? Swift의 LANGUAGE GUIDE 중 Inheritance 항목의 내용을 보시면 final에 대한 설명이 나옵니다. (발 번역 주의) “여러분은 final 키워드를 메소드나 프로퍼티, 또는 서브스크립트 앞에 사용함으로써 오버라이드 되는 것을 막을 수 있습니다. (예시: final var, final func, final class, final subscript). final을 써놓고 오버라이드를 하려고 하면 컴파일 에러가 발생합니다. extension을 사용하는 경우에도 final 키워드를 사용할 수 있습니다. (이하 생략)..

iOS/Common 2022.06.06

[Swift] lazy 왜 쓰나요?

우리 iOS 개발할 때 이런식으로 lazy 많이 쓰지요? private lazy var sampleLabel: UILable = { let label = UILabel() label.text = "lazy 왜 쓰나요?" label.textColor = UIColor.systemBlue return label }() 그런데 lazy를 왜 쓰는지 알고 계신가요? lazy 키워드를 사용하는 프로퍼티를 지연 저장 프로퍼티(Lazy Stroed Property)라고 합니다. 지연 저장 프로퍼티는 호출이 있어야만 값을 초기화 하는 특성을 가지고 있습니다. 좀 더 자세히 설명해 봅시다. 우리가 인스턴스를 초기화 하는 과정에서 언제나 모든 저장 프로퍼티가 동시에 초기화 될 필요가 없는 상황이 분명히 있겠지요? 그럴 때..

iOS/Common 2022.05.13

[RxSwift] RxSwift 왜 써야 하나요?

* 본 내용은 RxSwift의 Documentation에 있는 Why.md 문서를 번역한 내용입니다. 다소간의 부정확한 의역이 포함될 수 있으니 위 이미지를 클릭하셔서 원문을 확인하시기를 권장합니다! Rx(Reactive Extensions) 왜 쓰냐면요 Rx를 사용하면 앱을 선언형 프로그래밍의 방식으로 만들 수 있습니다. Bindings Observable.combineLatest(firstName.rx.text, lastName.rx.text) { $0 + " " + $1 } .map { "Greetings, \($0)" } .bind(to: greetingLabel.rx.text) UITableView와 UICollectionView를 구현할 때도 활용할 수 있습니다. viewModel .rows ..

[Code Snippet] private lazy var 쓰다가 팔 부러질 것 같을 때 보는 글

앱을 개발하는 과정에서 자연스럽게 많이 쓰게 되는 코드들이 있습니다. 제목에 써 놓은 'private lazy var' 외에도 여러분들 각자 상황에 따라 유독 자주 사용하는 코드가 있을 것입니다! 그럴 때 Xcode에서 제공하는 Create Code Snippet 한 번 사용해보시는 건 어떨까요?! 자 자 바로 시작합시다! 지금 보시는 화면이야 예시를 들기 위해서 세 개의 Label만 추가한 상황이지만, 실제로 앱을 만드는 과정에서는 다양한 종류의 UI Component들을 활용하는 경우가 많지요! 이런 상황에서 반복적으로 사용하게 되는 코드들을 복사해 놨다가 다음번에 붙여 넣기 하는 방법도 있겠지만, 좀 더 그럴싸한 방법이 있습니다! 보시면 'plv'만 작성했는데 자동완성으로 'private lazy..

iOS/Common 2022.04.29

키체인(Keychain)에 대한 설명과 간단한 사용법

iOS 앱 개발 과정에서 로컬(모바일 기기)에 특정 정보를 저장할 때 간단하게는 유저디폴트(UserDefaults)부터 코어데이터, Realm, SQLite 등 여러 저장 방식을 사용할 수 있습니다. 하지만 정말 중요한 사용자 정보들(예를 들어 패스워드, 프라이빗 키, 인증서 등)을 아무 곳에나 저장하는 것은 아주 위험하다고 할 수 있겠습니다! 민감한 정보를 안전하게 저장하기 위해 애플은 Keychain Services를 제공합니다. 여러분들은 사용자의 민감 정보를 암호화 해서 키체인에 저장하고, 이후에 이를 다시 복호화 해서 사용할 수 있습니다! 결국 중요한 것은 사용 방법이겠지요? 키체인을 생성(Create)하고, 읽고(Read), 지우는(Delete) 방법을 한 번 알아봅시다! 바로 전체 코드를 보..

iOS/Common 2022.04.20