본문 바로가기

모바일앱/Swift78

Day09 generic 제네릭을 이용해 코드를 구현하면 어떤 타입에도 유연하게 대응할 수 있다. 제네릭으로 구현한 기능과 타입은 재사용하기도 쉽고, 코드의 중복을 줄일 수 있다. 제네릭을 사용하고자 할 때는 제네릭이 필요한 타입 또는 메서드의 이름 뒤의 홀화살괄호 기호 사이에 제네릭을 위한 타입 매개변수를 써주어 제네릭을 사용할 것임을 표시한다. 제네릭 타입 제네릭 타입을 구현하면 구조체, 클래스, 열거형 등이 어떤 타입과도 연관되어 동작할 수 있다. 제네릭 타입을 정해주면 그 타입에만 동작하도록 제한할 수 있어 안전하고 의도한 대로 기능을 사용하도록 유도할 수 있다. import UIKit // 제네릭 : 어떤 자료형이라든지 받을 수 있다. // : 제네릭 표기 //보통은 SomeElement가 아닌 "T"로 입력한다. st.. 2021. 12. 3.
Day08 function parameter // #함수 매개변수 이름 function parameter 함수, 메소드 정의 func myFunction(name: String) -> String { return "안녕하세요? \(name)입니다!" } // 함수, 메소드를 호출한다. call myFunction(name: "기꼬") // -> "안녕하세요? 기꼬입니다!" 매개변수에 새로운 매개변수(파라미터) 사용 -> 실제 로직처리는 name으로 처리하지만 호출할 때, 다른 이름 사용가능 // 함수, 메소드 정의 func myFunctionSecond(with name: String) -> String { return "안녕하세요? \(name)입니다!" } myFunctionSecond(with: "호롤롤로") // -> "안녕하세요? 호롤롤로.. 2021. 12. 3.
Day07 property_observer Property Observers(프로퍼티 옵저버) Apple : Property Observers(프로퍼티 옵저버)를 정의해서 프로퍼티 값의 변경을 모니터링 할 수 있습니다. 프로퍼티 옵저버는 자신이 정의한 "저장 프로퍼티"에 추가 할 수 있으며, super class(부모클래스)를 상속한 프로퍼티에도 추가 할 수 있습니다. 프로퍼티 옵저버는 프로퍼티 값의 변화를 관찰하고, 이에 응답합니다. 프로퍼티 옵저버는 새로운 값이 프로퍼티의 현재값과 "동일하더라도" 속성의 값이 설정(set)될 때 마다 호출됩니다. ● willSet - 값이 저장되기 직전에 호출됩니다. ● didSet - 새로운 값이 저장된 직후에 호출됩니다. import UIKit var myAge = 0 { willSet{ print("값이.. 2021. 12. 2.
Day06 class_struct // 변수하나하나를 묶는 방법이 클래스와 스트럭트 두가지가 있다. struct YoutuberStruct { var name : String var subscribersCount: Int } // 메모리에 올리는데 name과 subscribersCount를 쓰라고 정함 var devGikko = YoutuberStruct(name: "기꼬", subscribersCount: 99999) var devGikkoClone = devGikko devGikkoClone.name = "호롤롤로" class YoutuberClass { var name : String var subscribersCount: Int // 처음에 메모리에 올리려면 위의 name과 subscribersCount에 대한 값이 없는 상태이기.. 2021. 11. 30.
Day05 Unwrap_Optional // 옵셔널이란? 옵션이 있을 수도 있고 없을 수도 있다-> 값이 있을 수도 없을 지 모른다. #1 강제 언래핑 #2 if let //만약 값이 있다면 otherVariable에 넣어 사용하겠습니다. if let otherVariable = someVariable { print("언래핑되었다. 즉 값이 있다. otherVariable: \(otherVariable)") } else { print("값이 없다.") } // -> 언래핑되었다. 즉 값이 있다. otherVariable: 90 #3 guard let func unwrap(parameter: Int?){ print("unwrap() called") // 값이 없으면 리턴해버리겠다. // 즉 지나간다. guard let unWrappedParam.. 2021. 11. 29.
Day04 For_Loops For 반복문은 for each와 거의 같다 레인지를 활용하는 방법 익히기 📌이상 이하 0...5 📌이상 미만 0.. index 혹은 iterate 때문에 i로 쓰는게 일반적 -> i를 나중에 다시 쓰지않는다고 알림창이 뜨기때문에 _로 대체사용가능 📌where 이후는 반복을 위한 조건을 사용할 수 있음 짝수일때 //for index in 0.. 2021. 11. 29.
Day03: enum enum 1. enum 선언하기 2. 값을 가질 수 있다. 3. 파라미터를 가질 수 있다. 4. enum안에 함수를 만들어 사용할 수 있다. import UIKit // #1 // 학교 - 초, 중, 고 enum School { // case elementary // case middle // case high case elementary, middle, high } let yourSchool = School.high print("yourSchool : \(yourSchool)") //print("yourSchool:", yourSchool) //-> yourSchool: high //#2 enum은 값을 가질 수 있다. enum Grade: Int { case first = 1 case second =.. 2021. 11. 29.
Day02 : For-each(자료 보강 필요) 반복문 콜렉션은 데이터를 모아둔 것이다. 배열, 셋, 딕셔너리 가 있다. 튜플도 비슷하지만 약간 다른 성격을 가지고 있다. For-In Loops는 배열안에 들어있는 데이터의 수 만큼 반복하는 것이다. For-In Loops에 where을 사용하면 조건을 넣을 수도 있다. 아직 초반이라 for - each에 대해 자세히 설명하기는 어렵다. 메서드에 대해 배우고 다시 포스팅 예정 참고 : https://babbab2.tistory.com/95 Swift) for - in / forEach 제대로 알고 쓰기 안녕하세요 :) 소들입니다 🌸 오늘은 우리가 Swift로 프로그래밍을 하다보면 정말정말 많이 쓰는 for - in forEach 에 대해서 알아보려고 해요!!!! 이 둘의 사용법은 물론 차이점에 대해서도.. 2021. 11. 28.
Day01 : Conditional Statements_If if는 Control Flow 에서 Conditional Statements(조건문)에 해당된다. 기본적으로 Boolean값을 가지고 있으며 참, 거짓에 해당하는 경우의 코드를 적어주어야 한다. 기본적인 형태는 아래와 같다. if (조건){ [참인 경우, 실행할 코드] } else { [거짓인 경우 실행할 코드] } 그리고 삼항연산자의 형태인 한줄의 코드로도 만들 수 있다. [조건에 해당하는 코드] ? [참인 경우, 실행할 코드] : [거짓인 경우 실행할 코드] 헷갈릴 수 있는 점 1. 조건에 해당하는 코드에 ==, != 2. [조건에 해당하는코드] 앞에 !가 있는지 여부 3. 조건에 해당하는 코드는 ()를 생략가능 import UIKit var isDarkMode : Bool = true //var i.. 2021. 11. 26.
생성자 이해하기, 2-phase Initialization, Convenience Initializer Initializer (생성자) 앞선 강의에서 Inheritance(상속)에 대해서 공부했다. 상속받은 클래스들을 생성할때 기본 생성자를 가지고 만드는데 부모자식간의 모양이 비슷한 것을 알 수 있다. 하지만 자식 클래스는 부모와 다르게 만들 수도 있다. import UIKit // 처음 코드 struct Grade { var letter: Character var points: Double var credits: Double } class Person { var firstName: String var lastName: String init(firstName: String, lastName: String) { self.firstName = firstName self.lastName = lastName } .. 2021. 10. 20.