Jessi :D

Swift

Swift

야곰아카데미 '코드 스타터 캠프'를 마치며 :)

야곰 스타터 캠프 계기 웹퍼블리셔에서 iOS로 넘어가겠다고 결심을 하고 널널하게 혼자 독학으로 공부를 시작해보기로 했다. 웹서핑을 하다가 야곰의 핑크색 책을 구입해서 읽어 보았지만, 아 역시 책은 내스타일이 아니었다. 책에 보니 사이트 안내가 나와있길래 들어가서 구경하다가 무료강의를 보다가 결과물을 만들어 보고 싶어서 인프런에서 야곰 강의를 구매해서 열심히 따라해보았다. 인프런에서 강의를 여러 강의도 들어보고, 유데미에서 클론코딩도 해보았다. 결과물은 늘어가지만 뭔가 내것으로 들어오는 느낌은 너무 느렸다.. 😭 초큼 답답해 하고 있던 찰나.. 때마침, 스타터 캠프 시작 기간과 잘 맞아서 바로 신청했다. 🤦🏽‍♀️ 결제를 해 놓고도 직장과 병행으로 잘 할수있을까 걱정이 들었다. 시작 막상 얼떨결에 시작이 ..

Swift - 고차함수 sort, sorted

변수선언 // 배열을 변수로 선언 var myArray = [1,2,3,4,5,6,7,8,9,10] sorted() sorted를 통해 오름차순으로 정렬된 새 콜렉션을 반환 var filteredArray = myArray.sorted() myArray // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] filteredArray // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 콜렉션 내의 데이터들을 번갈아 가면서 돌아, 반환 값이 true가 나올 때 해당하는 값을 넣음. 그래서 내림차순으로 정렬이 됨 var descandingArray = myArray.sorted(by: { (someValue:Int, otherValue:Int) -> Bool in return someValu..

Swift - 고차함수 (Higher Order Functions)

매개변수로 함수 혹은 클로저를 받고, 받았던 녀석을 반환하는 함수 콜렉션에 들어가는 배열, 딕셔너리, 셋에 Sorted, Map, Filter, Reduce 등이 빌트인 되어있다. 함수 getName → 메소드인데 매개변수로서 클러저를 받고 그 클로저를 반환하는데, 반환하면서 형태를 변환하거나 한다. func getName(_ name: String) -> String { return "내 이름은 \(name)" } // 함수 자체를 매개변수로 넣고 func sayHello( getName: (String) -> String, name: String) -> String { // 넣은 함수를 반환 return getName(name) } let resultOne = sayHello(getName: getN..

Swift - lazy 키워드

Struct Pet struct Pet { init(){ print("Pet이 생성되었다.") } } 일반 Struct Friend class, struct 동일하게 적용됨. struct Friend { var name: String // 펫을 맴버 변수로 가진다. var pet : Pet = Pet() // 생성자 메소드 init(_ name: String) { self.name = name print("Friend가 생성됨") } } Friend 호출 var myFriend = Friend("만쥬") print("myFriend : \(myFriend.name)") // myFriend : 만쥬 결과 Pet이 생성되었다. Friend가 생성됨 myFriend : 만쥬 lazy Struct Pet st..

Swift - typealias

typealias 별칭을 통해 프로토콜 별명 설정 가능 protocol Naming { func getName() -> String } protocol Aging { func getAge() -> Int } 별명설정 typealias Friendable = Naming & Aging struct Friend : Friendable { var name : String var age : Int func getName() -> String { return self.name } func getAge() -> Int { return self.age } } 클로저 // 클로저를 StringBlock 이라는 별명으로 설정 typealias StringBlock = (String) -> Void //func sayHi..

Swift - 프로토콜 associatedType

associatedtype 을 통해 제네릭으로 어떠한 자료형이든 가질수 있다 Protocol 애완동물 관련 프로토콜 protocol PetHaving { associatedtype T // 애완동물 배열 var pets: [T] { get set } // mutating을 통해 스트럭트에서 멤버 변수 값변경 mutating func gotNewPet(_ newPet: T) } ※ mutating - 포스트 바로가기 Extension 익스텐션으로 프로토콜의 메소드 로직 구성 extension PetHaving { mutating func gotNewPet(_ newPet: T) { self.pets.append(newPet) } } Enum enum Animal { case cat, dog, bird } ..

Swift - 프로토콜 확장

프로토콜 자체에서는 로직을 추가할 수 없으므로 익스텐션 확장을 이용해 메소드 추가함 프로토콜 이름관련 프로토콜 protocol Naming { var lastname: String { get set } var firstname: String { get set } func getName() -> String } 익스텐션 익스텐션 확장으로 메소드 추가 extension Naming { func getFullName() -> String { return self.lastname + " " + self.firstname } } 스트럭트 Naming 프로토콜을 임플레먼트하는 스트럭트 struct Friend : Naming { var lastname: String var firstname: String func ..

Swift - 프로토콜 상속

프로토콜 자체는 자신의 인스턴스는 만들지 못한다. 프로토콜을 임플리먼트하면 해당 프로토콜의 변수나, 메소드의 설정이 강제된다. 프로토콜도 상속해서 사용이 가능하다. 프로토콜 선언 // 이름 protocol Naming { // get set 을 통해 이름을 성정하고 가져올수 있다. var name: String { get set } func getName() -> String } // 나이 protocol Aging { var age: Int { get set } } 상속 이름, 나이 프로토콜을 상속하는 친구 프로토콜 protocol UserNotifiable : Naming, Aging { } 스트럭트 친구 프로토콜을 임플레먼트하는 MyFriend 스트럭트 struct MyFriend: UserNoti..

Swift - 프로토콜

약속 보통 delegate 패턴의 경우에는 **delegate, 스위프트 언어자체에서는 **ing, **able 등으로 프로토콜의 이름을 정함 프로토콜약속 프로토콜을 통해 맴버변수, 메소드 등을 꼭 구현하도록 강제 protocol Naming { // 우리는 이런 변수를 가지고 있을겁니다. 라고 약속 var name : String { get set } // 우리는 이런 메소드를 가지고 있을겁니다. 라고 약속 func getName() -> String } Nameing 프로토콜을 임플레먼트 했기 때문에 struct myName : Naming { // name 맴버 변수를 설정하지 않으면 에러 var name: String // getName() 메소드 설정 안하면 에러 func getName() ->..

Swift - 스트럭트 메소드

Struct에서도 메소드를 가질수 있고, 멤버 변수들 활용이 가능하다. struct Friend { var age : Int var name : String // 입력 가져오는 메소드 func sayHello() -> String { return "저는 \(age)살, \(name) 입니다." } } var myFriend = Friend(age: 100, name: "만쥬") myFriend.sayHello() // 저는 100살, 만쥬 입니다.

Swift - Set

콜렉션 중 하나인 Set set → 고유 배열과 비슷하지만... 배열처럼 중복으로 값을 넣을수 없다. 아무리 넣어도 고유한 값만 남는다. 순서가 정해져 있지 않다. 매번 출력되는 값들의 순서가 다르다. insert var myNumberSet = Set() var myNumberSet : Set = Set() myNumberSet.insert(1) //(inserted true, memberAfterInsert 1) myNumberSet.insert(2) //(inserted true, memberAfterInsert 2) myNumberSet.insert(2) //(inserted false, memberAfterInsert 2) myNumberSet.insert(3) //(inserted true, ..

Swift - 스트럭트 Mutating

class 는 참조, struct 는 값 Class 클래스는 참조이기 때문에 주소 값이 다르므로 name을 받을 수 있다. class Friend { var name : String func changeName(newName: String) { self.name = newName } init(_ name: String) { self.name = name } } var myFriend = Friend("만쥬") myFriend.name // 만쥬 myFriend.changeName(newName: "개발하는 만쥬") myFriend.name // 개발하는 만쥬 Struct struct는 값이으로 name을 받을 수 없다. mutating을 사용하여 name값을 받을 수 있다. struct BestFrien..

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..