본문 바로가기
728x90
SMALL

Swift83

스위프트에서 제공하는 AnyObject와 NSObject란? 1. AnyObject (프로토콜)AnyObject는 **"모든 클래스 타입"**을 나타내는 특수한 프로토콜입니다.성격: 모든 클래스(Class)는 암시적으로 AnyObject 프로토콜을 준수합니다.용도: 어떤 클래스의 인스턴스든 저장할 수 있는 유연한 타입을 만들 때 사용합니다.제한: 구조체(Struct)나 열거형(Enum)은 AnyObject 타입에 담을 수 없습니다. (오직 참조 타입만 가능)let someArray: [AnyObject] = [NSString(), MyCustomClass()] // 클래스 인스턴스라면 무엇이든 담을 수 있음class Dog { }class Cat { }// AnyObject 타입의 변수에는 개도 담기고 고양이도 담깁니다.var animal: AnyObject an.. 2025. 12. 22.
Facebook 로그인 구현 + Firebase 연결 https://explorer89.tistory.com/310 페이스북 로그인 기능 구현https://developers.facebook.com/apps/?show_reminder=true Facebook business.facebook.comhttps://youtu.be/W8NzdN0h50I?si=fwvW92WfBDj__GZZ https://zoeful-log.tistory.com/131 [Swift] SwiftUI로 Facebook Login 구현하기Facebook 공식문서를 보고 정explorer89.tistory.com 이전에 작성한 게시글 입니다.  이번에는 Facebook + Firebase 로그인 구현을 Combine을 통해 진행했습니다.  여기서 Appdelegate.swift 내용도 반드.. 2025. 1. 20.
ViewModel https://explorer89.tistory.com/82 ObservableObject와 @Published개체가 변경되기 전에 내보내는 게시자가 있는 개체 형식이다.?  @Published와 ObservableObject는 스위프트의 Combine 프레임워크에서 사용되는 속성 래퍼와 프로토콜이다.  ✅ 주로 SwiftUI와 함꼐 사용explorer89.tistory.com ObservableObject와 @PublishedObservableObjectObservableObject는 Combine 프레임워크에서 제공하는 프로토콜로, 객체의 상태가 변경될 때 이를 외부에 알리는 역할을 합니다.UIKit에서는 ObservableObject를 사용하더라도 SwiftUI와 같은 UI 자동 갱신은 없으므로, .. 2025. 1. 8.
setCustomSpacing(_:after:)의 역할 func setCustomSpacing(_ spacing: CGFloat, after arrangedSubview: UIView)setCustomSpacing(_:after:)의 역할스택 뷰는 기본적으로 모든 뷰 간의 간격을 동일하게 적용하는 spacing 프로퍼티를 제공합니다.그러나 setCustomSpacing을 사용하면 특정 뷰 이후에만 간격을 커스터마이징할 수 있습니다.// 특정 뷰 이후 간격 설정stackView.setCustomSpacing(10, after: separator)separator 뷰 이후의 간격이 10 포인트로 설정됩니다.나머지 간격은 stackView에서 설정한 기본 spacing인 5 포인트로 유지됩니다. 2025. 1. 5.
UICollectionViewCompositionalLayout 관련 데이터 소스 관리 CollectionViewCompositionalLayout을 사용하고, 다양한 데이터를 섹션별로 구성하려는 경우, 하나의 데이터 소스를 사용하는 것이 더 효율적입니다. 왜냐하면 CollectionViewCompositionalLayout은 기본적으로 섹션 단위로 데이터를 구분하여 UI를 구성하도록 설계되어 있기 때문입니다. 아래 함수는 외부 API를 요청하는 것으로, TMDB에 요청하여 그에 맞는 데이터를 받습니다. func fetchNowPlayingMovies(page: Int = 1) async throws -> TMDBData { ...}func fetchPopularMovies(page: Int = 1) async throws -> TMDBData { ...}func fetchTop.. 2025. 1. 3.
async / await 사용해보기 이번 글에서는 Swift에서 비동기 작업을 수행할 때 사용하는 async, await, throws의 개념과 함께, 오류를 세분화하여 처리하기 위한 중첩된 do-catch 구조에 대해 알아보겠습니다. 이 글에서는 fetchNowPlayingMovies라는 실제 예제 함수를 중심으로 설명합니다. func fetchNowPlayingMovies(page: Int = 1) async throws -> TMDBData { // Base URL guard let url = URL(string: "https://api.themoviedb.org/3/movie/now_playing") else { throw APIError.invalidURL } // URL Component.. 2025. 1. 2.
async/await란? async: 비동기 작업을 수행할 수 있는 함수나 메서드를 선언할 때 사용합니다.await: 비동기 작업의 결과를 기다릴 때 사용합니다. 기존에는 Swift에서 비동기 작업을 completion handler로 처리했기 때문에 코드가 복잡해지고 가독성이 떨어졌습니다.// 기존의 Completion Handler 방식func fetchData(completion: @escaping (String) -> Void) { DispatchQueue.global().async { completion("데이터 가져오기 완료") }}fetchData { result in print(result) // "데이터 가져오기 완료"}  이 방식은 중첩된 클로저가 많아지면 코드가 복잡해지고, 에러 .. 2024. 12. 18.
컬렉션 타입 3편 - 딕셔너리 딕셔너리 (dictionary) 는 순서와 상관없이 콜렉션에 같은 타입의 키 (key)와 같은 타입의 값 (value)를 저장합니다.각 값은 딕셔너리 내부에서 값에 대한 식별자로 동작하는 유니크한 키 와 조합됩니다.배열의 아이템과 다르게 딕셔너리의 아이템은 특정 순서를 가지고 있지 않습니다.특정 단어를 찾기위해 사전을 찾는 방법과 같이 식별자를 기준을 값을 찾을 때 딕셔너리를 사용합니다. 딕셔너리 타입 짧은 구문 (Dictionary Type Shorthand Syntax)Swift 딕셔너리의 타입은 Dictionary 로 적으며 Key 는 딕셔너리 키로 사용되는 값의 타입이고 Value 는 딕셔너리에 저장될 값의 타입 입니다.딕셔너리 Key 타입은 집합의 값 타입과 같이 반드시 Hashable 프로토콜.. 2024. 12. 11.
컬렉션 타입 2편 - 집합 https://bbiguduk.gitbook.io/swift/language-guide-1/collection-types#accessing-and-modifying-an-array 콜렉션 타입 (Collection Types) | Swift배열, 집합, 그리고 딕셔너리를 사용하여 데이터를 구성합니다. Swift는 콜렉션의 값을 저장하기 위한 배열 (array), 집합 (set), 딕셔너리 (dictionary)와 같은 3개의 원시적인 콜렉션 타입 (collection types)bbiguduk.gitbook.io 집합 (set) 은 콜렉션에 순서와 상관없이 같은 타입의 다른 값을 저장합니다.let numbers = [1, 2, 3, 3, 2, 1]let uniqueNumbers = Set(numbers).. 2024. 12. 11.
컬렉션 타입 1편 - 배열 https://bbiguduk.gitbook.io/swift/language-guide-1/collection-types#accessing-and-modifying-an-array 콜렉션 타입 (Collection Types) | Swift배열, 집합, 그리고 딕셔너리를 사용하여 데이터를 구성합니다. Swift는 콜렉션의 값을 저장하기 위한 배열 (array), 집합 (set), 딕셔너리 (dictionary)와 같은 3개의 원시적인 콜렉션 타입 (collection types)bbiguduk.gitbook.io Swift는 콜렉션의 값을 저장하기 위한 배열 (array), 집합 (set), 딕셔너리 (dictionary)와 같은 3개의 원시적인 콜렉션 타입 (collection types) 을 제공합니.. 2024. 12. 10.
async과 await 개요 Swift에서 async와 await는 비동기 코드를 작성하기 위한 주요 키워드로, 비동기 작업을 보다 직관적이고 안전하게 작성할 수 있도록 설계되었습니다.1. async역할: 비동기 작업을 포함하는 함수나 메서드를 정의합니다.특징:async 함수는 호출 시 즉시 결과를 반환하지 않고, 작업이 완료되기를 기다립니다.async 함수 내부에서만 await 키워드를 사용할 수 있습니다.2. await역할: 비동기 작업의 결과가 준비될 때까지 실행을 일시 중단합니다.특징:호출된 작업이 완료될 때까지 기다립니다.await는 항상 async 컨텍스트 내에서 사용해야 합니다. 3. 사용 방법기본 예제: async와 await// 비동기 함수 정의func fetchData() async -> String { //.. 2024. 12. 10.
컨텍스트 (context)는 무엇인가요? 컨텍스트(context)는 프로그래밍에서 작업이 실행되는 환경 또는 상황을 의미합니다. Swift에서 비동기 실행과 관련하여 컨텍스트는 태스크(task)가 실행되는 환경과 관련된 정보를 포함합니다.컨텍스트는 단순히 작업공간이라기보다는, 다음과 같은 요소들을 포함하는 더 넓은 의미를 가집니다: 1. Swift에서 컨텍스트의 의미Swift의 비동기 코드에서 컨텍스트는 태스크가 실행될 때 관리되는 상태나 환경을 의미합니다. 여기에는 다음이 포함됩니다:실행 중인 태스크(Task): 비동기 함수가 실행될 때, 해당 함수는 특정 태스크의 일부로 실행됩니다.스케줄링 정보: 태스크가 어떤 큐(queue)에서 실행되는지, 어떤 스레드(thread)에서 실행될지에 대한 정보.취소 상태: 태스크가 취소되었는지 여부를 추적... 2024. 12. 10.
enum 케이스 나누기 enum을 통해 카테고리를 구분할 수 있다.// 학교 - 초, 중, 고enum School {// case elementary// case middle// case high case elementary, middle, high}위의 코드는 School 이라는 enum을 생성하였고, 그 안에 case를 통해 elementary, middle, high를 구분했다.case 별로 작성해도 되고, 1개의 case에 여러 개 작성해도 된다.사용은 아래와 같이 변수 또는 상수에 할당하여 사용한다.print 문을 쓸 때는 2가지 방법으로 사용할 수 있다.let yourSchool = School.high//print("yourSchool: \\(yourSchool)")print("yourScho.. 2024. 12. 2.
기본 연산자 (Basic Operators) 할당, 산술 그리고 비교와 같은 동작을 수행연산자: 값을 체크, 변경, 결합하기 위해 사용하는 기호를 말함이 챕터에서는 Swift의 기본 연산자에 대해 설명 술어 (Terminology)단항 (Unary)“+a” 처럼 단일 항목에 동작단항 접두사 연산자: “!a” 처럼 항목 바로 직전에 위치단항 접미사 연산자: “c!” 처럼 항목 바로 직후에 위치이항 (Binary)“2 + 3” 처럼 2개의 항목에 동작2개의 항목 사이에 위치해야 하므로 위치는 고정삼항 (Ternary)3개의 항목에 동작“a ? b : c” 와 같이 사용연산자가 영향을 주는 값은 피연산자“1 + 2”에서 “+”는 중위 연산자, “1”과 “2”가 바로 피연산자 대입 연산자 (Assignment Operator)대입연산자“a = b”는 b의.. 2024. 12. 2.
파일 매니저와 코어 데이터를 사용하여 텍스트와 이미지 저장하기 https://explorer89.tistory.com/245 Feed의 Id는 언제 생기나?https://explorer89.tistory.com/244 데이터 모델 형식이 따른 장, 단점 (Feed VS [Feed])1. 기존 방식과 제안 방식 비교기존 방식:struct Feed { let id: UUID let title: String? let contents: String? let date: Date? let imagePath: [Striexplorer89.tistory.com 구조체 정의import Foundationimport UIKitstruct Feed: Codable { let title: String? let contents: String? let date: Date? .. 2024. 11. 27.
728x90
LIST