전체 글 94

흐름 제어 (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

스위프트에서 Extension은 어떻게 사용되나요?

스위프트에서 Extension은 어떻게 사용되나요? Extension은 클래스, 구조체, 열거형 타입에 새로운 메서드, 프로퍼티, 생성자를 추가로 정의할 때 사용 이때 저장 프로퍼티는 extension에 정의할 수 없고, 연산 프로퍼티만 정의할 수 있습니다. 소멸자(deinitializer)는 추가할 수 없고 생성자는 convenience init 만 정의할 수 있습니다. 구조체의 경우에는 기존 구조체에서는 생성자를 직접 구현하면 memberwise initializer(기본 생성자)가 사라지지만 구조체의 Extension에 생성자를 정의하면 memberwise initializer가 사라지지 않습니다. where을 사용하면 특정한 조건을 가진 타입에 대해서만 Extension을 적용할 수 있습니다.

데이터 타입 고급 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