본문 바로가기

iOS/Swift26

Swift) inout 파라미터 머리말 Swift는 다른 언어와 다르게 함수의 파라미터가 상수여서 파라미터의 값을 변경하려면 "inout"이라는 키워드를 사용해야 한다. 우리말로 하면 "출입"이라는 키워드일텐데 도대체 이 키워드는 무엇인지 살펴 보자. 본문 공식문서의 inout 한번 공식문서에서 inout을 살펴 보자 In-Out Parameters in Functions You write an in-out parameter by placing the inout keyword right before a parameter’s type. An in-out parameter has a value that’s passed in to the function, is modified by the function, and is passed back .. 2024. 4. 10.
Swift에서타입에 상관없이 코드를 작성할 수 없을까? (feat. Swift Generics) 목차 I. 머리말 들어가기 전에 개발자 앤디는 두 요소를 바꾸는 함수를 작성하기 위해 아래와 같이 코드를 작성하였다. 코드 func swapTwoStrings(_ a: inout String, _ b: inout String) { let temporaryA = a a = b b = temporaryA } func swapTwoDoubles(_ a: inout Double, _ b: inout Double) { let temporaryA = a a = b b = temporaryA } 하지만, 앤디는 이렇게 작성하면서 의문점이 들었다. 어차피 두 요소를 바꾸는 함수인데, 하나의 함수로 정의할 수는 없을까? 함수의 중복 동일한 기능을 수행하는 여러 개의 함수 앤디는 타입에 상관없이 함수를 하나로 묶고 싶다... 2024. 1. 2.
Swift) 프로토콜과 의존성 주입, 의존성 분리 원칙 (feat. DI & DIP) 목차 I. 머리말 (0) 요약 📝 4개의 주제표 아래와 같이 요약할 수 있다. 긴 글을 읽기 전에 일단 살펴 보고 가자. 용어 정의 문제 의존 관계 발생 1. 하위 모듈의 인스턴스를 상위 모듈 내부에 직접 생성할 경우 발생 2. 하위 모듈이 변경될 때마다 상위 모듈 또한 매번 대응해야 함 해결책 의존성 분리 1. Swift의 인터페이스인 프로토콜(Protocol)을 이용한 추상화 진행 2. 정의한 프로토콜을 실제 모듈에 채택하여 요구사항을 준수하도록 요구 수단 의존성 주입 (Dependency Injection) 1. 하위 모듈의 인스턴스를 외부에서 생성 2. 상위 모듈 내부에는 프로토콜을 프로퍼티로 정의하고 생성자를 통해 프로퍼티를 생성 원칙 의존성 역전 원칙 (DIP; Dependency Invers.. 2023. 12. 12.
Swift) static member cannot be used on instance of type 오류 (feat. 중첩한 타입) 요약 내용 상황 구조체와 클래스의 중첩된 타입(Nested Types) 상태에서, 인스턴스 멤버로 구조체/클래스 타입을 접근 시 static member 오류 접근 발생 원인 정적인 멤버(static member)는 인스턴스 멤버(instance member)로는 접근이 불가능하다 해결 중첩한 타입을 접근하려면 타입의 이름을 통해 접근해야 한다. 알게 된 내용 구조체와 클래스는 모두 "(커스텀) 타입"이다 타입은 정적 멤버(static member)이다. 중첩된 타입(nested types)을 접근하기 위해서, 바깥에 위치한 타입은 이름으로 접근해야 한다. 머리말 프로젝트의 MVVM 패턴 적용 프로젝트에서 ViewModel Input, Output 구조체를 ViewController에서 적용할 때 의문이.. 2023. 11. 9.
Swift) 클로저의 캡처와 참조 타입 머리말 포스팅을 하게 된 이유 클로저는 그저 이름이 없는 함수인가? 내가 기존에 사용하던 클로저는 그저 이름이 없는 함수, 함수의 이름을 짓기 귀찮을 때 사용하는 중괄호 `{}` 정도로만 여겼다. 하지만 수업 내용을 들으면서 단순히 클로가 함수의 기능을 넘어 값을 캡처하는 참조 타입이라는 것을 배웠는데 이를 정리하기 위해 포스팅을 하게 되었다. 클로저의 정의 공식 문서에 정의된 클로저는 다음과 같다. Group code that executes together, without creating a named function. 이름이 있는 함수를 만들지 않은 채, 같이 실행되는 코드의 묶음 Closures | Documentation 클로저의 추가적인 기능, 캡처(capture) 공식 문서의 서문에서 정의를.. 2023. 8. 31.
[Swift] didSet과 값 타입, 참조 타입의 인스턴스 머리말 글을 쓴 이유 내가 쓴 코드 // // VideoViewController.swift class VideoViewController: UIViewController { // 검색창과 테이블 뷰가 존재 -> searchBar에 didSet을 하면 왜 안될까? @IBOutlet weak var searchBar: UISearchBar! @IBOutlet weak var videoTableView: UITableView! // 검색 결과를 담은 videoList의 값이 변할 때마다 테이블 뷰를 업데이트 var videoList = [Video]() { didSet { videoTableView.reloadData() } } // 검색 결과(API 요청/응답)에 따라 videoList 배열에 새로 결괏값.. 2023. 8. 22.
[Swift] For-in Loop과 forEach Method의 차이점 머리말 for-in과 forEach는 그 생김새나 쓰임이 매우 비슷하다. 심지어 개발자 공식 문서에서 forEach를 설명할 때 for-in loop를 언급하면서 이를 정의한다. forEach의 정의 forEach(_:) Calls the given closure on each element in the sequence in the same order as a for-in loop. 주어진 클로저에 대하여, 시퀀스의 각 요소를 for-in 루프와 같은 순서로 호출한다 forEach(_:) | Apple Developer Documentation 그렇다면 두 개념의 차이는 무엇이고 실제 코드에서는 어떻게 다를까? 자세히 알아 보자. 차이점 둘에 대한 차이점은 바로 루프(loop; 반복문)와 클로저(clos.. 2023. 8. 17.
[Swift] 타입 캐스팅(Type Casting) 머리말 포스팅을 하게 된 이유 수업 시간에 UITableViewCell? 타입의 cell이라는 상수에 하위 클래스의 CustomTableViewCell 타입으로 다운캐스팅(as!)을 하는 것을 배웠다. as라는 키워드도 익숙하지 않은데 물음표(?)나 느낌표(!)까지 들어가 있어서 더더욱 무서웠다... 이후에 다운캐스팅을 포함한 타입 캐스팅에 대해 개념도 배우고 실습도 했지만 아직 긴가민가 해서 포스팅을 하게 됐다. 강의 시간의 코드 일부 class CustomTableViewCell: UITableViewCell { // ... func configureCell(row: ToDo) { // ... } // ... } class CustomTableViewController: UITableViewContr.. 2023. 7. 28.
[Swift] 열거형과 원싯값 (feat. CaseIterable) 머리말 참고 자료 Enumerations - The Swift Programming Language 열거형 (Enumerations) - Swift 열거형(Enumerations) 열거형의 정의 공식 문서에서 정의한 열거형이란 아래와 같다. 열거형은 연관된 값들의 묶음에 대하여 공통된 타입을 정의하고, 코드에서 타입 세이프한 방식으로 그 값들을 작업할 수 있도록 한다. An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code. 열거형 구문(Enumeration Syntax) enum이라는 키워드로 열거형을.. 2023. 7. 25.
[Swift] 번호 기호(#)로 Raw String 사용하기 머리말 참고 자료 Extended String Delimiters - Strings and Characters | Documentation 이스케이프 문자를 문자열로 표현하기 위한 번거로움 해당 문자 자체에 지정된 뜻을 가져서 곧바로 표현이 되지 않는 이스케이프 문자를 표현하기 위해서는 아래와 같이 문자의 바로 왼쪽에 역슬래시(\) 문자를 입력해야 한다. let backslash = "\\\\" // 역슬래시 let lineFeed = "\\\\n" // 줄바꿈 문자(\\n) let carriageReturn = "\\\\r" // 캐리지리턴 문자(\\r) let tab = "\\\\t" // 탭 문자(\\t) let quotationMark = "\\"" // " 큰따옴표 문자 하지만 하나의 문자열 안.. 2023. 7. 23.
반응형