728x90

분류 전체보기 307

PersonNameComponents를 사용해서 이름 파싱하기

안녕하세요. 이번에는 이름을 등록하면 알아서 파싱이 되는 PersonNameComponents에 대해 알아볼게요. 보통 이름을 파싱 하고 싶다면, 문자열을 split(separator:) method를 사용해서 파싱 하는 방법을 가장 쉽게 떠올릴 수 있습니다. 하지만, 우리의 갓플은 PersonNameComponents라는 구조체를 제공해주고 있었어요...ㅎ 요게 편리한 기능들을 이것저것 가지고 있더라구요??ㅎㅎㅎ... 그래서 한번 알아보려고 합니다. ## 1. PersonNameComponents 사용법 PersonNameComponents는 아래처럼 사용할 수 있어요. let name = "John Lennon" var nameComponents = try PersonNameComponents(nam..

Swift 2022.03.23

Image 비동기 로딩 API (UIKit)

안녕하세요. 이번에는 UIKit에서 이미지를 비동기로 로딩할 수 있는 API들에 대해 소개해보려고 합니다. 보통 UICollectionView, UITableView에서 스크롤을 하면, 이미지 로딩 때문에 조금씩 끊기는 현상을 볼 수 있어요. 그 원인은 첫째, 이미지 로딩할 때 디코딩이 필요한데 디코딩 작업이 메모리를 많이 사용하기 때문이에요. 둘째, 이미지 디코딩은 main thread에서 작업을 해야 하고 화면에 출력될 때 디코딩하는 lazy 한 방식을 사용하기 때문이에요. 물론, background에서 로딩, 디코딩할 수 있는 API가 있지만 워낙 low-level의 API이고 메모리 관리를 직접 해줘야 하는 불편함이 있어서 쉬운 작업은 아니에요...ㅠㅠㅠ 그런데!! iOS 15부터 훨씬 쉽게 ba..

UIKit 2022.03.23

mailto scheme과 기본 메일 앱 설정

안녕하세요. 이번에는 mailto scheme으로 아이폰 Mail 앱이 아닌 타사 Mail 앱을 여는 방법에 대해 알아볼게요. 기존의 MFMailComposeViewController를 사용하면 iPhone 기본 앱인 Mail 앱을 열고 메일을 작성할 수 있었어요. 근데 문제가 하나 있는게.. "나는 Mail 앱 대신 Gmail을 위주로 사용해서 Mail 앱에 로그인이 안되어 있어ㅠㅠ" 하는 경우도 있었겠죠?? 예전 같은 경우에는 Mail 앱에 로그인이 되어 있지 않을 경우에는 MFMailComposeViewController에서 에러가 발생했어요ㅠㅠ 또한 Gmail, Outlook 같은 타사 앱을 사용할 수도 없었죠.. 그런데 iOS 14부턴 이러한 문제가 해결되었답니다!! iOS 14부터는 기본 메일..

iOS 2022.03.23

__printChanges

안녕하세요. 이번에는 SwiftUI의 __printChanges에 대해 알아볼게요. __printChanges는 Xcode 13부터 사용할 수 있는 method인데요, SwiftUI의 body가 다시 그려질 때(상태 값이 변경될 때), 뷰의 프로퍼티가 어떤 값으로 변하는지 콘솔에 출력해주는 method입니다. 사용법은 아주 간단해요ㅎㅎㅎ 뷰 body 안에 아래 코드를 추가해주면 끝입니다. Self._printChanges() 직접 확인해볼까요?? struct ContentView: View { @State private var isShow = false @State private var isOn = true @State private var speed = 50.0 @State private var isE..

SwiftUI 2022.03.23

Xcode 13.3에서 Swift 프로젝트 빌드 속도를 더 빠르게

안녕하세요. 최근에 Xcode 13.3이 배포되었는데요, 빌드 시스템에 빌드 속도를 높일 수 있는 새로운 기능이 추가되어서 소개해보려고 합니다. Xcode 13.3 Release Note를 보면 아래 명령어로 옵션을 활성화시키면 Swift 프로젝트의 빌드 속도가 빨라진다고 해요. defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 1 Swift 프로젝트에서 위의 옵션을 비활성화/활성화시킨 후에 비교해봤어요. 옵션 비활성화 옵션 활성화 확실히 옵션을 활성화 시켰을 때 시간이 35초 -> 15초로 단축이 된 것을 볼 수 있었습니다ㅎㅎㅎ Xcode에서 빌드에 걸린 시간 확인 방법은 아래 글을 참고해주세요! Xcode에서 빌드에 걸린 시간..

Xcode 2022.03.21

Swift 5.6 공식 배포

2022/03/14에 Xcode 13.3이 공식 배포됨에 따라, Swift 5.6도 배포가 되었습니다. 아래 글 본문에 Swift 5.6 신규 기능들에 대해 설명이 되어 있구요 https://www.swift.org/blog/swift-5.6-released/ Swift 5.6 Released! Swift 5.6 is now officially released! www.swift.org 제가 따로 정리한 글도 있으니 참고해주세요!! Swift 5.6 추가된 기능들 Swift 5.6 추가된 기능들 안녕하세요. 이번에는 Swift 5.6에 새롭게 추가된 기능들에 대해 알아볼게요. Swift 5.6은 현재 베타 버전으로 올라온 Xcode 13.3에서 사용 가능하니 참고 부탁드려요. # 1. any 키워드 SE..

News 2022.03.20

SceneStorage

안녕하세요. 이번에는 SwiftUI의 SceneStorage에 대해 알아볼게요. # 1. Overview SceneStorage는 Scene 고유 저장소에 읽고 쓰고 할 수 있는 프로퍼티 래퍼입니다. 상태를 복구하고 싶을 때, SceneStorage를 사용합니다. State와 유사하지만, SceneStorage는 동일 Scene에서는 그 값을 공유합니다. 다른 Scene들 간에는 SceneStorage 데이터는 공유되지 않습니다. 주의할 점이 있는데요, SceneStorage를 관리하는 시스템은 언제 어떻게 데이터를 지속시킬 건지 보장해주지 않아요. 그리고 SceneStorage에 저장할 데이터가 무거울 경우(ex. model data) 성능에 안 좋을 수 있으니 가벼운 데이터만 사용해주세요. 또한, S..

SwiftUI 2022.03.20

Xcode에서 빌드에 걸린 시간 확인 방법

안녕하세요. 이번에는 Xcode에서 빌드에 걸린 시간을 확인하는 방법에 대해 소개해볼게요. 보통 Xcode에서 빌드하면, 아래처럼 "Build Succeeded"라는 메시지와 빌드가 끝난 시간을 표시해줍니다. 근데, 빌드가 끝난 시간이 아닌 빌드에 걸린 시간을 표시해줄 수도 있어요. 방법은 터미널에 가서 아래 명령어를 입력해줍니다. defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES 그다음에 Xcode에서 다시 빌드를 해보면 빌드에 걸린 시간을 표시해줍니다ㅎㅎㅎ 만약 설정을 원래대로(= 빌드가 끝난 시간을 보고 싶을 경우) 되돌리고 싶다면 터미널에서 아래 명령어를 입력해주세요! defaults delete com.apple.dt.Xcode ..

Xcode 2022.03.19

[오픈소스] Flow

안녕하세요. 이번에는 Flow라는 오픈소스를 직접 써보는 시간을 가져볼게요. This library provides a bunch of extension methods for a better fluent syntax in Swift. This style is very useful for some operations that benefit from being able to be chained (composed) together. Flow 라이브러리는 Swift의 가독성을 높이는 확장 method를 제공합니다. 살펴볼게요ㅎㅎ ## 1. then then method는 copy한 인스턴스를 리턴하기 때문에, 주로 인스턴스를 초기화할 때 사용합니다. 초기 설정들을 블록 안에서 처리하기 때문에, 초기화를 어떻게 ..

Swift 2022.03.16