[SwiftUI] @SceneStorage(화면 저장소) vs @AppStorage(앱 저장소)
·
[Programming Language]/[SwiftUI]
[머릿말]앱에서 필요한 데이터를 저장하기 위해 사용하는 두 개념에 대해 접하게 되었다. 데이터를 저장하는 일은 필수적이므로 자주 찾아보게 될 것 같아 글로 남겨놓고자 한다.@SceneStorage와 @AppStorage는 모두 프로퍼티 래퍼(Property wrapper)다. 이는 SwiftUI가 데이터를 저장할 목적으로 제공한다. 저장할 데이터에 대한 String 타입의 key 값을 통해 데이터를 구분짓는다. 우리가 사용하는 앱은 종료되더라도 데이터는 보존된다. 이는 두 프로퍼티 래퍼를 사용하여 구현해볼 수 있다. ⦿ 두 프로퍼티 래퍼를 사용하지 않았을 때는?두 프로퍼티 래퍼를 사용하지 않은 경우, 앱이 종료되면 데이터는 그 즉시 소멸된다. 간단하게 회원가입 화면을 통해 확인해보자. 아래 코드는 Sce..
[SwiftUI] Deprecated된 tabItem(_:)을 대신하여 Tab()을 사용할 수 있다
·
[Programming Language]/[SwiftUI]
[머릿말]Android 앱 개발 공부를 할 때도 느꼈던 것이지만 유독 앱 분야가 변동사항이 많은 것 같다. 비교적 최근에 출판된 책으로 공부를 하고 있음에도 불구하고 deprecated 되었다는 문구를 많이 확인하고 있다. deprecated 되었다는 것은 새로운 대체제가 있다는 것이므로 어떤 대체제가 있는지 찾아보며 공부하고 있는데 이것도 하나의 재미 포인트로 작용하는 것 같다.● tabItem(_:) 이란?공식 문서에서의 내용은 다음과 같다."뷰와 연관된 탭바 아이템을 설정한다."iOS 13.0부터 18.1까지 잘 사용된 함수인 것 같은데... 왜 사라지는 것인가... 이것을 사용하면 TabView의 하단에 tab bar item을 설정할 수 있다. 아래 예제를 통해 확인해보자.import Swift..
[SwiftUI] OutlineGroup과 DisclosureGroup의 차이점
·
[Programming Language]/[SwiftUI]
[머릿말]List, OutlineGroup과 DisclosureGroup에 대해 공부하던 중 이것들의 차이점에 대해 궁금해졌다. 자식 데이터에 대한 계층적 구조를 가진 뷰를 만드는 공통점에 반해 차이점은 무엇인지 말이다. 결론부터 말하자면 OutlineGroup은 자식 데이터(children)가 있는 경우 알아서 그에 대한 계층적 뷰를 생성하여 보여준다. 그러나 DisclosureGroup은 계층적 뷰를 만들기 위해선 직접 작성해야 한다는 차이점이 존재한다. 즉, OutlineGroup은 계층적 구조를 가지는 데이터에 대한 뷰를 자동으로 만들어 주는 것이고, DisclosureGroup은 계층적 뷰를 만들 수 있는 껍데기(?)라고 할 수 있는 것이다.● OutlineGroup 이란?공식 문서에서의 내용은..
[Swift] String.allSatisfy(_:) 함수란?
·
[Programming Language]/[Swift]
[머릿말]프로그래머스 문제를 풀던 중 처음 보는 함수를 발견했다. 함수 이름만 봐도 대충 어떤 역할을 하는지 알 것 같지만 까먹지 않기 위해 따로 정리해놓으려 한다.⦿ 공식 문서공식 문서에서의 설명은 다음과 같다.시퀀스의 모든 요소가 주어진 조건을 만족하는지 여부를 나타내는 부울 값을 반환한다. 함수의 반환 값은 Bool 타입이다. 모든 요소가 조건을 만족하면 true, 그렇지 않으면 false를 반환한다. 내가 이 함수를 접하게 된 것은 주어진 자료형이 String인 경우였는데 공식 문서를 보다 보니 배열(Array)이나 딕셔너리(Dictionary) 등에서도 사용이 가능한 것 같다.  ⦿ 사용 예시1) 문자열인 경우 - Stringvar text: String = "0123456789"print(te..
[Swift] SubSequence(ArraySlice)를 그냥 사용하는 것과 저장하고 사용하는 것의 속도 차이가 발생하는 이유는?
·
[Programming Language]/[Swift]
[머릿말]프로그래머스에서 햄버거 만들기 문제를 풀며 경험한 일이다. 분명 동일한 알고리즘으로 작성된 코드인데 suffix(_:) 함수의 결과를 저장하지 않고 사용하면 시간 초과가 발생하고, 저장하고 사용하면 통과가 되는 것이다..! 단순히 저장의 유무에 따라 결과가 달라지는 것이 궁금하여 관련 이유를 찾아보게 되었고 알게 된 내용을 정리하고자 한다.⦿ 코드import Foundationfunc solution(_ ingredient: [Int]) -> Int { var stack: [Int] = [] var count = 0 // 재료 배열을 하나씩 탐색 for item in ingredient { stack.append(item) //..
[Swift] ASCII Code 변환 방법(숫자 <-> 문자 변환 방법)
·
[Programming Language]/[Swift]
[머릿말]Python에서는 아스키 코드를 문자로 변환하거나 문자를 아스키 코드로 변환하는 것이 chr( ), ord( ) 함수만 사용하면 됐기에 매우 간단했었다. Swift에서 변환하는 방법은 아직 익숙하지 않음에 따라 계속 찾아보게 될 것 같아 따로 정리를 하게 되었다.1. 문자 -> ASCII Code(숫자) 변환1-1. (문자).asciiValuevar a: Character = "a"print(a.asciiValue) // Optional(97)print(a.asciiValue!) // 97String 타입에는 사용할 수 없고 오직 Character 타입에만 사용할 수 있다.특정 문자에 대한 ASCII Code가 없을 수도 있으므로 반환 타입은 Optional 이다.Optional을 Unwrap..
[Swift] @discardableResult - 반환값 무시
·
[Programming Language]/[Swift]
[머릿말]Swift 코드를 살펴보던 중 처음보는 것을 발견하였다. 이름만 보면 '버릴 수 있는 결과'를 뜻하는 것 같은데 정확히 어떤 역할을 하는 것인지 궁금하여 찾아보게 되었다.1. @discardableResult@discardableResult란 메서드의 반환값을 사용하지 않는 경우에 사용하는 속성(Attribute)이다. Swift 공식 문서에서는 다음과 같이 정의되어 있다. Documentation docs.swift.org  1-1. 왜 사용하는가?아무런 값을 반환하지 않는 메서드가 아닌, 특정 값을 반환하는 메서드를 호출했지만 반환 값을 사용하지 않는 경우 Swift 컴파일러는 Warning을 띄운다. 1-2. 사용 방법사용 방법은 메서드의 func 키워드 앞 부분에 '@discardable..
[Swift] 선언형 프로그래밍 vs 명령형 프로그래밍
·
[Programming Language]/[Swift]
[머릿말]SwiftUI를 공부하려 보면 선언형 프로그래밍과 명령형 프로그래밍이라는 말을 접하게 된다. SwiftUI는 선언형 프로그래밍이라고 하고, UIKit은 명령형 프로그래밍이라고 하는데 이것들이 무엇이고 차이점은 무엇인지 궁금하여 찾아보게 되었다.1. 프로그래밍 패러다임명령형 프로그래밍과 선언형 프로그래밍은 프로그래밍 패러다임의 일종이다. 그렇다면 프로그래밍 패러다임이란 무엇일까? 프로그래밍이나 소프트웨어 개발에 접근하는 특정한 방식.특정 관점과 접근 방식에 따른 코딩 방식.간단하게 말해 프로그래밍 패러다임은 '프로그래밍을 하는 방식' 정도로 이해할 수 있다. 그럼 이제 명령형 프로그래밍과 선언형 프로그래밍의 차이점에 대해 알아보자. 2. 명령형 프로그래밍(Imperative) vs 선언형 프로그래..
[Swift] 열거형(enum: Enumerations) 총 정리
·
[Programming Language]/[Swift]
1. 열거형(enum)열거형이란 성격(종류)가 비슷한 값들의 그룹 개념으로 비슷한 데이터를 나타내는 값들을 모아서 정의한 것이다. 이는 다른 프로그래밍 언어에서도 종종 본 적이 있을 것이다. 예를들어 나라에 대한 열거형이라 한다면 아래와 같이 나타낼 수 있다.enum Countries { case korea case japan case america case canada}// 각 값을 쉼표(,)로 구분하여 한 줄로 작성하는 것도 가능enum Countries { case korea, japan, america, canada}열거형을 정의할 땐 위와 같이 열거형의 이름은 첫글자를 대문자로, 각각의 case는 소문자로 작성한다. 추가로 열거형은 각각의 값을 case로 나눠서 정의할..
[Swift] 함수(Functions) 총 정리
·
[Programming Language]/[Swift]
1. 함수함수란 특정 작업을 수행하는 코드 모음을 말한다. 함수의 이름을 지을 때는 함수의 동작에 관련되도록 짓는다. 예를 들어 더하는 기능을 하는 함수의 이름은 "add"라고 할 수 있다. 1-1. 함수의 정의함수는 하나 이상의 매개변수와 반환값을 가질 수 있다. 매개변수(parameter)는 없을 수도 있으며, 반환 값이 Void 타입인 경우 생략이 가능하다. func 함수명(매개변수명: 타입) -> 반환 타입 { ...함수에서 실행할 작업... return 반환값}  1-2. 매개변수(parameter)매개변수란 함수가 특정 동작을 수행할 때 사용할 값으로, "매개변수명: 타입" 형태로 사용한다. 매개변수명은 목적에 맞게 설정하도록 하며, 설정한 매개변수명은 함수 호출 시 사용해야 한다...