iOS 152

ViewController의 라이프 사이클

애플에서 제공하는 뷰 컨트롤러의 생명주기 ViewDidLoad: 뷰 컨트롤러를 만들 때 1번 호출 ViewWillAppear: 뷰가 곧 보일 때 호출되는 메서드 ViewDidAppear: 뷰가 보여진 뒤 호출되는 메서드 ViewWillDeappear: 뷰가 사라지기 직전에 호출되는 메서드 ViewDidDisappear: 뷰가 사라진 직후 호출되는 메서드 ★ 앱을 종료하는 것이 아니라 background foreground의 전환에는 뷰 컨트롤러 관련 메서드가 호출되지 않음 ★

iOS/UIKIT 2024.01.10

흐름 제어 (if 구문)

if 구문 스위프트의 if 구문은 조건의 값이 꼭 Bool 타입이어야 함 if 구문 기본 구현 var numA: Int = 10 var numB: Int = 101 if numA > numB { print("numA가 더 커요") } else { print("numB가 터 커요") } // numB가 더 커요 else if 구문은 개수에 상관없이 작성이 가능 else 블럭은 없어도 가능 먼저 else if 블럭의 조건이 맞으면, 블럭 내부의 코드를 실행 후 조건문 탈출 그 뒤에 ele if 블럭의 조건이 맞아도 실행 안됨 (else if 블럭 내의 조건을 소괄호를 묶는건 선택사항) var numA: Int = 10 var numB: Int = 101 if numA == numB { print("numA와..

iOS/Swift 2024.01.10

main storyboard (메인 스토리보드) 삭제하는 방법

먼저 프로젝트를 하나 생성 폴더명 표시줄에 "Main" 파일을 삭제 ("Main" 파일을 선택한 뒤 백스페이스로 파일 삭제 -> 이 때 Move to Trash 선택) info 파일을 선택한 뒤에 화살표가 가리키는 파일 삭제 "command" + "shift" + "f" 키를 누른 뒤에 검색창에 "main" 검색 (1번) 2번이 가리키는 파일 선택한 뒤에 3번 검색창에 "main" 검색 4번이 가리키는 파일 삭제 (파일 선택 뒤 백스페이스) SceneDelegate 파일 내 코드 수정 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { ..

iOS/UIKIT 2024.01.09

연산자

스위프트에서 연산자는 특정한 문자로 표현한 함수 연산자의 분류 분류 설명 예 단항 연산자 피연산자가 한 개인 연산자 !A 이항 연산자 피연산자가 두 개인 연산자 A + B 삼항 연산자 피연산자가 세 개인 연산자 A? B : C 전위 연산자 연산자가 피 연산자 앞에 위치하는 연산자 !A 중위 연산자 연산자가 피연산자 사이에 위치하는 연산자 A + B 후위 연산자 연산자가 피연산자 뒤에 위치하는 연산자 A! 연산자의 종류 할당 연산자 A = B A에 B라는 값을 할당 산술 연산자 + , - , * , / , % 같은 사칙연산 비교 연산자 두 값을 비교할 때 사용 ==, >= ,>, != 등의 비교연산 ★ "==" 와 "==="의 차이 ★ A == B : A와 B가 같은 값인지 비교하여 불리언 값을 반환 A ..

iOS/Swift 2024.01.09

데이터 타입 고급 4편 (열거형 2탄)

항목 순회 열거형에 포함된 항목을 알고 싶다면? 열거형 이름 뒤에 콜론(:)을 작성하고 CaseIterable 프로토콜을 채택 열거형에 allCases라는 이름의 타입 프로퍼티를 통해 모든 항목 확인 CaseIterable 프로토콜을 활용한 열거형의 항목 순회 enum Fruit: CaseIterable { case apple case banana case melon case kiwi } let allCases: [Fruit] = Fruit.allCases print(allCases) // [main.Fruit.apple, main.Fruit.banana, main.Fruit.melon, main.Fruit.kiwi] 만약에 원시값을 갖는다면? enum Fruit: String, CaseIterable ..

iOS/Swift 2024.01.08

데이터 타입 고급 4편 (열거형 1탄)

열거형은 연관된 항목들을 묶은 타입 프로그래머가 정의한 항목 외에는 추가 / 수정 불가 주로 다음과 같은 경우 사용 - 제한된 선택지 제공 - 정해진 값 외에 입력 제한 - 입력 값 한정 기본 열거형 키워드 enum으로 선언 각 항목 자체가 고유의 값임 Fruit 열거형의 선언 enum Fruit { case apple case banana case kiwi case melon } // 위와 같은 표현 (한 줄로도 작성 가능) enum Fruit { case apple, banana, kiwi, melon } Fruit 열거형 변수의 생성 및 값 변경 var myFruit: Fruit = Fruit.apple print(myFruit) // apple // 위의 코드와 같은 표현 var yourFruit..

iOS/Swift 2024.01.07

데이터 타입 고급 3편 (컬렉션형)

스위프트는 컬렉션 타입을 통해 수 많은 데이터를 묶어 관리 컬렉션 타입에는 배열(Array), 딕셔너리(Dictionary), 세트(Set) 있음 배열 같은 타입의 데이터를 순서대로 저장 중복 저장 가능 배열 선언과 생성 // 배열 선언 방법 var fruitList: Array = ["Apple", "Banana", "Melon"] var fruits: [String] = ["Apple", "Banana", "Melon"] 배열의 사용 배열은 인덱스를 통해 요소 접근 (인덱스는 0부터 시작) index(of: ) => 해당 요소의 인덱스 확인 (중복 요소 있을 시, 가장 먼저 발견된 요소의 인덱스 확인) ★ index(of: ) 대신 firstIndex(of: ) 사용 권장 ★ append(_: ) =..

iOS/Swift 2024.01.05

데이터 타입 고급 2편 (튜플)

튜플 (Tuple) 지정된 데이터의 묶음 이라고 표현 타입 이름이 따로 없고, 일정 타입의 나열만으로 튜플 타입 생성 가능 튜플에 포함될 데이터의 개수는 제한이 없음 튜플 기본 var fruit: (String, Int, Double) = ("Apple", 1000, 120.21) print("과일 이름 \(fruit.0), 과일 가격 \(fruit.1)원, 과일 무게 \(fruit.2)g 입니다.") // 과일 이름 Apple, 과일 가격 1000원, 과일 무게 120.21g 입니다. // 인덱스를 통한 값 할당 가능 // 사고 가격이 오르고 무게가 줄었다면? fruit.1 = 1500 fruit.2 = 100.8 print("과일 이름 \(fruit.0), 과일 가격 \(fruit.1)원, 과일 무게..

iOS/Swift 2024.01.04

데이터 타입 고급 1편 (데이터 타입 안심, 타입 별칭)

스위프트에서는 서로 다른 타입끼리의 데이터 교환은 꼭 타입 캐스팅 (Type - casting)을 거쳐야함 데이터 타입 안심 스위프트에서는 Int 타입 변수에는 Int 타입만, Character 타입 변수에는 Character 타입만 할당하도록 되어 있음 만약에 Int 타입에 Int 타입 외의 값을 할당하면 컴파일 시 타입을 확인하여 오류를 반환함 타입 추론 스위프트에서는 변수 또는 상수를 선언할 때 타입을 명시하지 않아도 컴파일러가 할당된 값을 기준으로 타입을 결정 타입 안심과 타입 추론 var name = "Steve" print(type(of: name)) // String 출력 name = 100 // error: cannot assign value of type 'Int' to type 'Str..

iOS/Swift 2024.01.03