Jessi :D

Language

Language

Swift - 에러

자료형이 Error인 enum 에러를 enum 타입으로 작성할 수 있다. enum MismathError: Error { case nameMismatch case numberMismatch } 에러 던지기메소드 반환형 없음 func guessMyName(name input: String) throws { // 매개변수로 받은 이름이 '만쥬' 일치하지 않으면 if input != "만쥬" { print("guessMyName : 틀렸다") // 이름 미스매치 에러를 던진다, 보낸다. throw MismathError.nameMismatch //return } print("guessMyName : 맞췄다") } 에러호출 안함 // 에러를 처리하지 않음 try? guessMyName(name: "만슈") 에러..

Swift - 매소드 매개변수

메소드 매개변수 name을 받는 메소드 _ 언더바를 넣어 메소드 호출시에 이름 안써도 됨 func sayName(_ name: String) { // 받은 매개변수를 이용해 프린트로 출력 print("안녕? \(name) 라고 해") } sayName("만쥬") // 안녕? 만쥬 라고 해 inout 메소드에 매개변수로 들어오는 값은 변경 할 수가 없다, 하지만, inout 키워드를 이용하면 값 변경 가능 func sayHi(_ name: inout String) { name = "개발하는 " + name print("안녕? \(name) 라고 해") } 변수선언 inout 메소드에 들어가는 값은 자체가 상수이기 때문에, 메소드에 바로 값을 넣지 못한다. 값이 변경 가능해야 되기 빼문에 변수에 값을 한번 ..

Swift - 파이널 클래스

final 키워드로 다른 클래스가 상속받지 못함 정상 상속 코드 class Friend { var name : String init(name: String) { self.name = name } } class BestFriend : Friend { override init(name: String) { super.init(name: "베프" + name) } } let myFriend = Friend(name: "철수") myFriend.name // 철수 let myBF = BestFriend(name: "수잔") myBF.name // 베프수잔 파이널 코드 // final 키워드로 다른 클래스가 상속받지 못함 final class Friend { var name : String init(name: St..

Swift - 딕셔너리

Dictionary 키 : 값 한 쌍으로 가지고 옴 정렬되지 않은 컬렉션 - print 하면 순서 없이 뒤죽박죽 출력 됨 빈 딕셔너리 생성 let emptyDictionary : [String : Int] = [:] let emptyDictionary2 : [String : Int] = [String : Int]() let emptyDictionary3 = [String : Int]() let myEmptyDic : [String : Int] = Dictionary() let myEmptyDic2 = Dictionary() myFriend 선언 변수 선언 // 변수 선언 var myFriends = ["friend_1" : "만쥬", "friend_2" : "영희"] 값 꺼기 let myBF1 = myF..

Swift - 상속

상속 - 위에서 아래로 내려받는다 class Friend { var name : String init(_ name : String) { self.name = name } func sayHi() { print("안녕?! 난 \(self.name)라고 해") } } 덮어쓰기가 되었다. class BestFriend : Friend { // override 를 통해 부모클래스의 메소드를 가져온다. override init(_ name : String) { // super 키워드로 부모의 메소드를 사용 super.init("베프 " + name) } override func sayHi() { super.sayHi() } } let myFriend = Friend("만쥬") myFriend.sayHi() // 안..

Swift - 객체 생성자, 해제자

클래스 → 빵틀, 객체(object) → 빵(메모리) 즉, 메모리에 올린다. (아직 이해가 덜 가지만, 이마저도 잊을까봐 일단 기록😭) 예제1 클래스 class MyFriend { var name : String init(_ name: String = "이름없음") { self.name = name print("init() MyFriend 가 메모리에 올라갔다.", self.name) } deinit { print("deinit() 메모리에서 사라짐 - ", self.name) } // deinit 검증을 위해 작성 var calledTimes = 0 let MAX_TIMES = 5 static var instancesOfSelf = [MyFriend]() class func destorySelf(obj..

Swift - 매개변수로서 클로저

1. 클로저를 매개변수로 completion 이라는 클로저를 매개변수로 가지는 메소드 정의 () -> Void ▼ 같음 ▼ func completion() { } func sayHi(completion: () -> Void) { print("sayHi() called") sleep(2) // 2초 잠깐 멈추기 // completion 클로저 실행 completion() } 메소드 호출부에서 이벤트 종료를 알 수 있다 1 sayHi(completion: { print("2초가 지났다. 1") }) 2 sayHi() { print("2초가 지났다. 2") } 3 sayHi { print("2초가 지났다. 3") } 2. 데이터를 반환 매개변수로서 데이터를 반환하는 클로저 (String) -> Void ▼ 같..

Swift - 클로저

클로저 자체는 메소드를 받아서 실행하는 것 String을 반환하는 클로저 let myName : String = { // myName 으로 들어간다 return "만쥬" }() print(myName) // 만쥬 매개변수를 가지고 String으로 반환하는 클로저 클로저 정의 String을 받아서 String으로 반환한다 let myRealName : (Stirng) -> String = { (name: String) -> String in let myRealName = { (name: String) -> String in return "개발하는 \(name)" } print(myRealName("만쥬")) // 개발하는 만쥬 print 로직을 담고 있는 클로저 let myNameLogic = { prin..

Swift - 제네릭

제네릭은 배열열에 어떠한 형태든 받을수 있음 struct myArray{ // 제네릭을 담은 빈 배열 // 멤버변수 var elements : [T] = [T]() // 생성자 메소드 // _ 앞에 언더바를 넣음으로 매개변수 이름 생략 init(_ elements: [T]) { self.elements = elements } } Struct 생성 struct Friend { var name: String } 숫자 var mySomeArray = myArray([1,2,3]) print("mySomeArray : \(mySomeArray)") // mySomeArray : myArray(elements: [1, 2, 3]) 문자열 var myStringArray = myArray(["가","나","다"])..

Swift - 함수 매개변수 이름

함수정의시 매개변수 이름 설정 설정방법 1 // 함수, 메소드 정의 func myFunction(name: String) -> String { return "안녕하세요?! \(name) 입니다!" } // 함수, 메소드를 호출한다. call myFunction(name: "만쥬") // "안녕하세요?! 만쥬 입니다!" 설정방법 2 // 함수, 메소드 정의 func myFunctionSecond(with name: String) -> String { return "안녕하세요?! \(name) 입니다!" } myFunctionSecond(with: "둘리") // "안녕하세요?! 둘리 입니다!" 설정방법 3 // 함수, 메소드 정의 func myFunctionThird(_ name: String) -> St..

Swift - 프로퍼티 옵저버

var myAge = 0 { willSet { print("값이 설정될 예정이다. myAge: \(myAge)") } didSet { print("값이 설정되었다. myAge: \(myAge)") } } myAge = 10 //값이 설정될 예정이다. myAge: 0 //값이 설정되었다. myAge: 10 myAge = 20 //값이 설정될 예정이다. myAge: 10 //값이 설정되었다. myAge: 20

Swift - Struct vs Class

스트럭터와 클래스 비교 Struct - 구조체 // 유튜버 (데이터) 모델 struct YoutuberStruct { var name : String var subscriberCount : Int } 값 넣기 전 var devJung = YoutuberStruct(name: "정대리", subscriberCount: 999) var devJungClone = devJung print("값 넣기 전 : devJungClone.name : \(devJungClone.name)") //값 넣기 전 : devJungClone.name : 정대리 값 넣은 후 값을 새로 넣어도 원래의 값은 변하지 않음 devJungClone.name = "만쥬" print("값 넣은 후 : devJungClone.name : \(..

Swift - For 반복문

// 6 times : 0 -> 5 for i in 0...5 { print("i : \(i)") // 0,1,2,3,4,5 } // 5 times : 0 -> 4 for i in 0.. 4 까지 짝수만 for i in 0..

Swift - enum 케이스 나누기

enum 케이스 나누기 학교를 선언 enum School { case elementary case middle case high } 아래처럼 선언해도 된다. enum School { case elementary, middle, high } let yourSchool = School.elementary print("yourSchool : \(yourSchool)") // yourSchool : elementary 학년 선언 enum Grade : Int { case first = 1 case second = 2 } 값 let yourGrade = Grade.second // second 값을가지고 있는 값 rawValue let yourGrade = Grade.second.rawValue // 2 학교 상..

Swift - foreach 반복문

var arr : [Int] = [0, 1, 2, 3, 4, 5] for item in arr { print("item : \(item)") // 0,1,2,3,4,5 } for item in arr where item > 3 { print("5보다 큰수 : \(item)") // 4,5 } for item in arr where item % 2 == 0 { print("짝수 : \(item)") // 0,2,4 }