본문 바로가기

스위프트 기본10

assert와 guard 애플리케이션이 동작 도중에 생성하는 다양한 연산 결과값을 동적으로 확인하고 안전하게 처리할 수 있도록 확인 및 처리할 수 있다. Assertion assert 함수는 디버깅 모드에서만 동작 배포하는 애플리케이션에서는 제외된다. 주로 디버깅 중 조건의 검증을 위하여 사용한다. 조건이 맞지 않으면 동작을 중지하면서 에러 표시에 메시지가 나온다. 나이를 확인하고 에러 발생하면 디버깅 창에서 에러창이 보이게 하는 함수를 생성한다면? 빠른 종료 "guard"를 사용하여 잘못한 값의 전달 시 특정 실행구문을 빠르게 종료한다. "guard"의 "else" 블럭 내부에는 특정 코드 블럭을 종료하는 지시어 (return, break 등)가 꼭 있어야 한다. 타입 캐스팅, 옵셔널과도 자주 사용된다. func functio.. 2024. 4. 9.
옵셔널 체이닝 옵셔널 체이닝 옵셔널의 내부의 내부의 내부로 옵셔널이 연결되어 있을 떄 활용할 수 있다. 매 번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인할 수 있다. Person 클래스의 home 이라는 프로퍼티는 Apartment 클래스 타입을 사용한다. Apartment 클래스의 guard, owner 프로퍼티는 Person 클래스 타입을 사용한다. class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String var `guard`: .. 2024. 4. 6.
인스턴스의 생성과 소멸 이니셜라이저: 인스턴스를 생성 디이니셜라이저: 인스턴스 소멸될 때 호출 프로퍼티 기본값 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효값이 할당되어 있어야 한다. 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 된다. class Actor { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "no selected" var age: Int = 0 var titleMovie: String = "no selected" } // 인스턴스 생성 var robert: Actor = Actor() // 생성된 인스턴스의 프로퍼티에 각각 값 할당 robert.name = "로버트 다우닝 주니어" robert.age = 50 robert.titleM.. 2024. 4. 5.
상속 상속 클래스, 프로토콜: 상속 가능 열거형, 구조체: 상속 불가능 다중상속은 미지원 클래스의 상속과 재정의 class 이름: 상속받을 클래스 이름 { /* 구현부 */ } // 기반 클래스 Actor class Actor { var name: String = "" func selfIntroduce() { print("안녕하세요 저는 \(self.name) 배우입니다.") } // final 키워드를 사용하여 재정의를 방지할 수 있다. final func myName() { print("안녕하세요 저는 actor 클래스 내에 있습니다.") } // 타입 메서드 // 재정의 불가 타입 메서드 - static static func typeMethod() { print("type method - static").. 2024. 4. 4.
Filemanager로 CRUD 해보기 Filemanager 사용해보기 먼저 위치를 확인한다. 아래 코드를 실행하면 콘솔창에 주소가 하나 뜬다. 그걸 터미널에 열어서 open 주소라고 치면 어떤 폴더가 나온다. 이 폴더가 바로 앞으로 작업할 폴더 이다. override func viewDidLoad() { ... let manager = FileManager.default guard let url = manager.urls( for: .documentDirectory, in: .userDomainMask).first else { return } print(url.path) } 작업을 저장할 폴더 만들기 만들 때 먼저 해야하는 것이 바로 "경로 설정"이다. 여기서는 newFolderUrl 이라는 변수에 url (위에서 만든 변수) 변수로 설정된.. 2024. 4. 4.
프로퍼티 프로퍼티 클래스, 구조체, 열거형과 연관된 값이다. 타입과 관련된 값을 저장 및 연산이 가능하다. 프로퍼티의 종류 인스턴스 저장 프로퍼티 타입 저장 프로퍼티 인스턴스 연산 프로퍼티 타입 연산 프로퍼티 지연 저장 프로퍼티 정의와 사용 열거형 내부에서는 연산 프로퍼티만 가능 연산 프로퍼티는 "var"로만 선언 가능 연산 프로퍼티는 읽기 전용으로는 구현 가능 쓰기 전용으로는 구현 불가능 읽기 전용으로 구현할 경우 get 블럭만 작성 (이 때, get 블럭은 생략 가능) 읽기, 쓰기 모두 가능하게 하기 위해서는 get 블럭, set 블럭 모두 구현 set 블럭에는 암시적 매개변수 newValue 사용 가능 struct FruitInfo { // 인스턴스 저장 프로퍼티 var name: String = "Not .. 2024. 4. 3.
Class vs Struct / Enum 열거형과 구조체는 값 타입 클래스는 참조 타입 클래스는 상속 가능 열거형과 구조체는 상속 불가능 struct ValueType { var property = 1 } class ReferenceType { var property = 1 } 첫 번째 구조체 인스턴스를 두 번째 인스턴스에 복사한 뒤 두 번째 구조체 인스턴스의 property 값을 변경해도 첫 번째 구조체 인스턴스의 property 값의 변화는 없다 ⭐️ 두 번째 구조체 인스턴스는 첫 번째 구조체를 복사한 별도의 인스턴스이기 때문이다 ⭐️ // 첫 번째 구조체 인스턴스 let firstStruct = ValueType() // 두 번째 구조체 인스턴스에 첫 번째 인스턴스 복사 var secondStruct = firstStruct // 두 번째.. 2024. 4. 3.
열거형 열거형 1. enum은 타입, 대문자 카멜케이스를 사용하여 이름을 정의한다. 2. 각 case는 소문자 카멜케이스로 정의한다. 3. 각 case는 그 자체가 고유의 값이다. 4. 각 케이스는 한 줄에 개별로도, 한 줄에 여러 개도 정의할 수 있다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // ... } 열거형 사용 enum FruitInfo { case apple case banana case kiwi case melon, strawberry, orange } // 열거형 타입과 케이스를 모두 사용된다. var apple: FruitInfo = FruitInfo.apple print(apple) // apple switch의 비교값에 열거형 타입이 위치할 때 .. 2024. 4. 2.
클래스 (Class) 정의 문법 클래스는 참조 타입이다. 타입이름은 대문자 카멜케이스를 사용하여 정의한다. class 이름 { /* 구현부 */ } 프로퍼티 및 메서드 구현 클래스의 타입 메서드는 두 종류가 있다. 상속 후 재정의가 가능한 class 타입메서드, 상속 후 재정의가 불가능한 static 타입메서드가 있다. class Sample { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() { print("instance method") } // 타입 메서드 // 재정의 불가 .. 2024. 4. 1.
반복문 for ~ in while repeat ~ while for ~ in 구문 for ~ in 구문의 기본 형태 for item in items { /* 실행 구문 */ } for ~ in 구문의 사용 var myNumber: [Int] = [1,2,3,4,5] for item in myNumber{ print("배열 내 데이터 : \(item)") } /* 배열 내 데이터 : 1 배열 내 데이터 : 2 배열 내 데이터 : 3 배열 내 데이터 : 4 배열 내 데이터 : 5 */ 컬렉션의 딕셔너리 경우 item은 key와 value로 구성된 튜플 타입이다. var mathScore = ["jerry" : 100, "mike": 90, "john" : 85, "tom" : 70] for (name, score).. 2024. 3. 26.