분류 전체보기 썸네일형 리스트형 [Swift] 옵셔널 체이닝과 nil 병합 연산자 옵셔널 체이닝 - 옵셔널 체이닝은 옵셔널 요소 내부의 프로퍼티로 또 다시 옵셔널이 연속적으로 연결되는 경우 유용하게 사용할 수 있다. class Person { var name: Stringvar job: String?var home: Apartment? init(name: String) {self.name = name}} class Apartment { var buildingNumber: Stringvar roomNumber: Stringvar `guard`: Person?var owner: Person? init(dong: String, ho: String) {buildingNumber = dongroomNumber = ho}} let joy: Person? = Person(name: "joy")le.. [Swift] 인스턴스의 생성과 소멸 인스턴스의 생성과 소멸 이니셜라이저와 디이니셜라이저 - init, deinit - 스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 한다. - 프로퍼티에 미리 기본값을 할당해두면 - 인스턴스가 생성됨과 동시에 초기값을 지니게 된다. class PersonA { // 모든 저장 프로퍼티에 기본값 할당 필요!! 안되면 컴파일 에러 뜸var name: String = "joy"var age: int = 10} let jason: PersonA = PersonA()jason.name = "jason"jason.age = 30 // 이니셜라이저// 프로퍼티 기본값을 지정하기 어려운 경우에는// 이니셜라이저를 통해// 인스턴스가 가져야 할 초기값을 전달할 수 있다. class .. [Swift] 상속 상속 - 스위프트의 상속은 클래스, 프로토콜 등에서 가능하다. - 열거형, 구조체는 상속이 불가능하다. - 스위프트는 다중상속을 지원하지 않는다. - 이번 파트에서는 클래스의 상속에 대해서 알아본다. class 이름: 상속받을 클래스 이름 { 구현부} class Person { var name: String = "" func selfIntroduce() {print("저는 \(name)입니다") } // final 키워드를 사용하여 재정의를 방지할 수 있다.final func sayHello() {print("hello")} // 타입 메서드// 재정의 불가 타입 메서드 - staticstatic func typeMethod() {print("type method - static")} // 재정의 가능 .. [Swift] 프로퍼티 감시자 프로퍼티 감시자 - 프로퍼티 감시자를 사용하면 프로퍼티 값이 변경될 때 원하는 동작을 수행할 수 있다. struct Money { // 프로퍼티 감시자 사용var currencyRate: Double = 1100 {willSet(newRate) {print("환율이 \(currencyRate)에서 \(newRate)으로 변경될 예정입니다.")}didSet(oldRate) {print("환율이 \(oldRate)에서 \(currencyRate)으로 변경되었습니다")}} // 프로퍼티 감시자 사용var dollar: Double = 0 {// willSet의 암시적 매개변수 이름 newValuewillSet {print("\(dollar)달러에서 \(newValue)달러로 변경될 예정입니다")} // did.. [Swift] 프로퍼티 프로퍼티 - 저장 프로퍼티(stored property) - 연산 프로퍼티(computed property) - 인스턴스 프로퍼티(instance property) - 타입 프로퍼티(type property) // 프로퍼티는 구조체, 클래스, 열거형 내부에 구현할 수 있다.// 다만 열거형 내부에는 연산 프로퍼티만 구현할 수 있다.// 연산 프로퍼티는 var 로만 선언할 수 있다. struct Student { // 인스턴트 저장 프로퍼티var name: String = ""var `class`: String = "Swift"var koreanAge: Int = 0 // 인스턴스 연산 프로퍼티var westernAge: Int {get {return koreanAge - 1}set(inputValue) .. [Swift] 클로저 고급 클로저 고급 - 후행 클로저 - 반환타입 생략 - 단축 인자이름 - 암시적 변환 표현 func calculate(a: Int, b: Int, method: (Int, Int) -> Int ) -> Int {return method(a, b)} var result: Int // 기본 result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) -> Int inreturn left + right}) // 후행 클로저// 클로저가 함수의 마지막 전달인자라면// 마지막 매개변수 이름을 생략한 후 // 함수 소괄호 외부에 클로저를 구현할 수 있다. result = calculate(a: 10, b: 10) { (left: Int, right: Int) -.. [Swift] 클로저 기본 - 코드의 블럭 - 일급 시민(first-citizen) - 변수, 상수 등으로 저장, 전달인자로 전달이 가능 - 함수 : 이름이 있는 클로저 { (매개변수 목록) -> 반환타입 in실행 코드} // 함수를 사용한다면 func sumFunction(a: Int, b: Int) -> Int {return a+b} var sumResult: Int = sumFunction(a: 1, b: 2) print(sumResult) // 3 // 클로저의 사용 var sum: (Int, Int) -> Int = { (a: Int, b: Int) inreturn a + b} sumResult = sum(1, 2) print(sumResult) // 3 // 함수는 클로저의 일종이므로 // sum 변수에는 당연히 함수도.. [Swift] 값 타입과 참조 타입 Class- 전통적인 OOP 관점에서의 클래스- 단일 상속- (인스턴스/타입) 메서드- (인스턴스/타입) 프로퍼티- 참조 타입- Apple 프레임워크 대부분의 큰 뼈대는 모두 클래스로 구성 Struct- C 언어 등의 구조체보다 다양한 기능- 상속 불가- (인스턴스/타입) 메서드- (인스턴스/타입) 프로퍼티- 값 타입- Swift 대부분의 큰 뼈대는 모두 구조체로 구성 Enum- 다른 언어의 열거형과는 많이 다른 존재- 상속 불가- (인스턴스/타입) 메서드- (인스턴스/타입) 연산 프로퍼티- 값 타입- Enumeration- 유사한 종류의 여러 값을 유의미한 이름으로 한 곳에 모아 정의예) 요일, 상태값, 월(Month) 등- 열거형 자체가 하나의 데이터 타입, 열거형의 case 하나하나 전부 하나의 유.. 이전 1 ··· 42 43 44 45 46 47 48 ··· 122 다음