iOS

WWDC22(Platforms State of the Union)에서 Swift의 변경점을 정리해봅니다. 개별 세션의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. WidgetKit WatchOS용 앱에서 사용하던 WidgetKit을 이제 iOS의 잠금화면용 Widget에서도 사용할 수 있게 되었습니다. 애플워치의 Complication을 iOS로 확장시켰습니다. 모든 위젯은 iOS, WatchOS에서 모두 작동. 기존 WatchOS용 WidgetKit을 그대로 사용할 수 있습니다. 플랫폼의 차이를 자동으로 관리합니다. 잠금화면의 위젯색상을 조정해서 가독성을 높였습니다. 기존 WatchOS에서 사용했던 것처럼 3가지 타입이 있습니다. Circular, Retanglar, Inline. ..
WWDC22(Platforms State of the Union)에서 SwiftUI의 변경점을 정리해봅니다. 개별 세션의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. Navigation Stack 새 내비게이션 API. 가장 알맞은 네비게이션 스타일을 쉽게 표현하게 해줍니다. 선택사항을 쉽게 저장하고 복구할 수 있고, 네비게이션 스택의 내용 전체를 대체할 수도 있습니다. 이 기능으로 인해 앱 실행단계 설정, 사이즈 클래스간의 전환 관리, 딥링크 응답 같은 동작을 쉽게 처리가 가능합니다. NavigationSplitView 선택사항을 추적하는 Sidebar, NavigationStack이 포함된 뷰입니다. Sidebar 선택사항이 변경되면 콘텐츠도 변경시켜 줍니다. Scene API 맥..
WWDC22(Platforms State of the Union)에서 Swift의 변경점을 정리해봅니다. 개별 세션의 내용을 참조한 내용들도 있으며, 글은 계속 수정될 수 있습니다. Async Algorithm Package await 키워드: 두 비동기 시퀸스를 zip으로 묶는 작업이 가능하게 해줍니다. try-catch: 네트워크 스트리밍되는 비동기 데이터로 인한 네트워크 장애를 처리할 수 있게 해줍니다. throttle 키워드: 새로 추가된 키워드. 시퀸스로부터의 업데이트를 늦춰주는 시간 기반 알고리즘을 제공. (기존) actor : 스레드로부터 안전한 동시성 실행 코드를 사용해 데이터를 격리하게 해줍니다. Swift는 의도치않게 병렬 스레드 간에 그런 상태를 공유하는 것을 막아줍니다. async/..
· iOS/iOS Dev
iOS의 앱에서 타 앱을 호출하는 방법으로 URLScheme(이하 scheme, 혹은 스키마)가 있습니다. 앱에서는 project파일의 target->Info 에서 URL Types 를 설정하여 외부에서 앱을 호출할 수 있는 스키마를 설정해줄 수 있습니다. +버튼을 누르면 여러개를 설정할 수도 있고, 어떤 스키마로 호출되는지에 따라 다른 동작을 하도록 구현할 수 있게 됩니다. (하나의 스키마로도 추가로 프로퍼티를 받아서 동작에 분기를 시킬 수 있기 때문에 가급적 하나의 스키마로 처리하는게 더 좋습니다) 그러면 외부 앱에서 해당앱을 호출할 수 있게 되는데요. 호출하는 쪽에서는 앱의 Info.plist에 LSApplicationQueriesSchemes (Array)항목에 호출할 앱의 스키마를 작성해줍니다...
· iOS/Swift
joined 함수를 정리해봅니다. 시퀸스가 들어있는 배열일 때, 하나의 시퀸스로 이어주는 함수입니다. String도 Charactor의 시퀸스라고 볼 수 있고, 정수 배열 해당이 됩니다. String일 때와 그 이외의 배열일 때가 약간 다릅니다. String 배열의 joined String의 배열의 joined 함수의 정의는 아래와 같습니다. 매개변수로 seperator가 있고 생략했을 때는 ""가 기본으로 적용됩니다. String의 배열에 joined를 적용하면 아래처럼 이어집니다. let someAlmonds = ["HoneyButter", "Wasabi", "Corn", "Buldak", "MintChoco"] let joinedAlmonds = someAlmonds.joined() print(jo..
· iOS/Swift
CustomStringConvertible 프로토콜은 객체를 String으로 변환해서 표현하고 싶을 때 사용하는 프로토콜로, 주로 print()함수를 통해 출력할 때 유용합니다. 정의를 보면 description 계산 프로퍼티를 구현하도록 되어 있는 것을 확인할 수 있습니다. 예제에서는 Point 구조체를 CustomStringConvertible 프로토콜을 구현하여, print()함수 호출시 출력할 String을 정의해주었습니다. 사실 구조체는 CustomStringConvertible을 구현하지 않아도 어느 정도 String으로 변환해서 보여줍니다. 아래는 Almond 구조체입니다. print했을 때, 객체의 타입과 프로퍼티 값들을 보여줍니다. struct Almond { var name: Strin..
· iOS/Swift
이번 포스팅에서는 zip 함수를 정리해봅니다. Summary에서는 Sequence프로토콜을 따르는 두 개의 기본 시퀀스로 구성된 쌍의 시퀀스를 만들도록 되어 있습니다. 여기서 시퀸스 프로토콜은 '요소에 대한 순차적이고 반복적인 액세스를 제공하는 유형'으로 친숙한 배열에 이에 해당합니다. 아래는 예시입니다. let someAlmonds = ["Honey Butter", "Wasabi", "Corn", "Buldak", "Mint Choco"] let someNumbers = [0, 1, 2, 3, 4] let newSequence = zip(someAlmonds, someNumbers) for item in newSequence { print(item) } // 출력 //("Honey Butter", 0)..
· iOS/Swift
1급 객체(First class citizen)와 고차함수(고계함수) 프로그래밍 언어에서 1급 객체란 아래의 조건을 충족시키면 됩니다. 1. 변수나 데이터에 할당 할 수 있어야 한다. 2. 객체의 매개변수로 넘길 수 있어야 한다. 3. 객체의 반환값으로 리턴 할수 있 swifty-cody.tistory.com 이전에 썼던 고차함수 글에 이어서, Swift 표준 라이브러리에서 지원하는 고차함수인 filter, reduce, map을 정리해보겠습니다. 이 고차함수들은 컨테이너 타입(Array, Dictionary, Set, ...)에 구현되어 있는 제네릭 함수입니다. 우리가 주로 for문을 돌면서 어떤 결과를 추려낼 때 하던 작업을 이 함수들로 대체할 수 있습니다. // 예시로 사용할 컨테이너 let som..
· iOS/Swift
Equatable Equatable은 두개의 값이 동일한 값인지 아닌지 비교를 하기 위해서 따라야하는 프로토콜입니다. 이 프로토콜을 따르는 타입의 인스턴스는 == 나 != 연산자로 같은지, 같지 않은지 판단할 수 있게 됩니다. Swift 표준 라이브러리의 대부분의 기본 타입들(Int, Double, Float, String, Bool, ...)은 이 프로토콜을 따르고 있습니다. 기본 타입들이 아닌 클래스, 구조체도 해당 프로토콜을 따르면 비교연산자를 통해서 같은지, 아닌지 판단할 수 있게 됩니다. Equatable 프로토콜을 살펴보면 static func ==(lhs: Self, rhs: Self)->Bool 함수를 구현함으로써 해당 프로토콜을 쓸 수 있게 되어 있습니다. lhs는 ==의 왼쪽에, rhs..
· iOS/Swift
stride는 시작값(from)에서부터 끝값을 포함(through)하거나, 미포함(to)할 때까지 지정한 양(by)만큼 늘어나는 시퀸스를 반환하는 제네릭 함수입니다. // stride(from:to:by)는 to를 포함하지 않음 for i in stride(from: 0, to: 5, by: 1) { print(i) // 0, 1, 2, 3, 4 } // stride(from:through:by)는 through를 포함 for i in stride(from: 0, through: 5, by: 1) { print(i) // 0, 1, 2, 3, 4, 5 }
· iOS/Swift
서브스크립트는 콜렉션 타입(Array, Dictionary, Set), 시퀸스 등 집합의 인스턴스에서 특정 항목에 쉽게 접근할 수 있게 해주는 문법입니다. 우리가 평소에 자연스럽게 사용하던 배열 인스턴스의 특정 항목에 접근하기 위해 사용하는 someArray[index], Dictionary에서의 someDictionary[key] 과 같은 문법이 서브스크립트입니다. 서브스크립트를 통해 추가적인 메서드 필요없이 특정 값을 할당하거나 가져올 수 있습니다. 그리고 하나의 타입에 여러 서브스크립트를 정의하고, overload도 가능. 매개변수도 하나가 아니라 여러개를 받도록 정의할 수 있습니다. 서브스크립트의 작성 서브스크립트를 선언하는 방법은 계산프로퍼티를 선언하는 것과 유사합니다. subscript(ind..
· iOS/Swift
Swift의 열거형(enumeration, enum)에 대해서 작성해봅니다. 열거형은 유사성을 가진 값들을 공통된 타입으로 선언해서, 형 안정성(type-safety)을 보장하는 코드를 작성할 수 있게 해줍니다. rawValue와 관련값을 가질 수 있고, 일급객체이기 때문에 계산프로퍼티, 함수를 작성할 수 있고 초기화를 지정하거나 확장도 가능합니다. 열거형의 기본 문법 열거형의 기본 문법은 아래와 같습니다. 열거형은 타입 정의와 같기 때문에 네이밍을 파스칼표기법으로 해주고, case문에는 카멜표기법으로 해줍니다. enum SomeEnum { case someCase case anotherCase case otherCase } 사용 예. enum Almond { case honeyButter case wa..
얼마전 애플에서 3년간 업데이트 되지 않은 어플을 앱스토어에서 퇴출시키겠다는 통보를 했다는 뉴스가 있었는데요. 해당 통보 이후 많은 개발자들이 항의를 한 모양입니다. 그래서 정책을 수정해서 3년간 업데이트를 하지 않은 어플 중, 12개월 간 최소 다운로드 임계점을 넘지 않은 앱들에 한해서 앱스토어에서 퇴출시킨다는 이메일 안내를 하고 통보 후 30일 내에 업데이트를 하라고 한 것을 90일로 변경한다고 합니다. Clarifying criteria & new timing extension for App Store Improvements process - Latest News - Apple Developer User trust in quality apps is the basis for all we have do..
· iOS/Swift
Swift 5.0부터 도입된 Result타입에 대해 정리해봅니다. Result타입은 실패가 가능한 작업을 할 때 기존에 성공시 원하는 데이터를, error발생시 Error를 throw하는 문법 대신에 Result타입을 던지도록 되어 있는 문법입니다. 이걸 도입한 이유는 기존에 error를 처리하던 throw방식에 몇가지 문제가 있었기 때문입니다. 기존 throw, do, try, catch 문법 Result타입을 보기 전에 먼저 기존의 throw문법을 보겠습니다. 아몬드를 주문하는 예제입니다. enum AlmondOrderError: Error, CaseIterable { case invalidSelection // 잘못된 선택 case lackOfMoney // 예산 부족 case outOfStock ..
애플, 오래된 앱 퇴출한다…개발자들 '반발' (사진=픽사베이) 애플이 일정 기간 업데이트를 실시하지 않은 애플리케이션(이하 앱)을 대상으로 단속에 나섰다.23일(현지시간) IT 전문매체
SwiftyCody
'iOS' 카테고리의 글 목록 (8 Page)