일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 네이버 부스트캠프
- ObservedObject
- SWIFT
- 데이터베이스 공부
- 네이버 치지직
- Apple Developer Academy @ POSTECH
- global soop
- 애플 디벨로퍼 아카데미
- 애플 디벨로퍼 아카데미 21주차 회고
- 치지직
- 제앱소
- Swift 문법
- 앱 비교 프로젝트
- 운영체제
- Swift 디자인패턴
- 숭실대
- apple developer academy 후기
- ObservableObject
- 소프트웨어분석및설계
- sqoop
- 애플 디벨로퍼 아카데미 후기
- OS
- swift문법
- react
- iOS 개발 오류
- Swift 기능
- 데이터베이스
- 애플 아카데미 후기
- useReducer
- StateObject
- Today
- Total
목록분류 전체보기 (290)
사과하는 제라스
딕셔너리 그룹핑을 해보자. 일단 Collection 타입 중 하나인 Dictionary에 대해서 특정 요소를 기준으로 그룹핑을 해줄 수가 있다. 사용법은 다음 예시를 통해보자. import UIKit struct Friend{ var name: String var school: String } let friends = [ Friend(name: "김도영", school:"기아고등학교"), Friend(name: "박찬호", school:"기아고등학교"), Friend(name: "최원준", school:"기아고등학교"), Friend(name: "문동주", school:"한화고등학교"), Friend(name: "문현빈", school:"한화고등학교"), ] let schoolFriends = Dicti..
map을 공부하다가 보니 compactMap이란 것을 알게 되었다. 우리가 늘 상 쓰는 map은 nil을 포함하는 collection타입(배열, set 등등)에 대해서 적용 시 nil의 경우엔 따로 unwrapping도 해줘야 하고 처리를 해줄 필요가 있다. 하지만 compactMap을 쓴다면 nil인 요소들은 건너뛰어주고, unwrapping도 스스로 적용해서 optional한 collection에 대해 unwrapping이 되어 나오기에 편리하다. 다음을 보도록 하자. import UIKit arr = ["hello", "hi", nil, "ok"] arr.map{ print($0+"라고 말했다.") } 이럴 경우 에러가 뜬다. String?이기에 unwrapping이 필요하다. import UIKi..
class func와 static func는 기존의 func와 달리 메모리에 올리지 않고서 사용이 가능하다. 즉, 따로 객체를 만들고 해당 객체를 통해서 func를 쓰지 않고 바로 class를 통해 접근이 가능하다. 다음을 보자. class Say { // class func의 사용 class func hello(){ print("say hello") } // static func의 사용 static func hi(){ print("say hi") } } 엥? 그럼 둘 다 똑같은 거면 왜 따로 씀? 스택 오버플로우에서 검색해본 결과 이것처럼 static func는 사실상 class func지만 final 즉, 오버라이드가 불가능한 class func다. 이 부분이 둘의 차이이고, 또 다른 정보로는 str..
고차함수가 뭘까? 일단, 고차함수는 다른 함수를 매개변수로 받거나 함수 실행의 결과를 함수로 반환하는 함수다. 코드를 한번 보자. // 이런 함수가 있다고 하자. func getName(_ name: String) -> String { return "내 이름은 \(name)" } // 이 함수를 클로저 형태로 보면 이런 식으로 될 것이다. var getNameClosure : (String) -> String // sayHello라는 함수를 만들고 해당 함수에는 매개변수로 클로저를 두자. 여기에는 나중에 getName이란 함수를 넣어볼 거다. func sayHello( getName: (String) -> String, name: String) -> String { return getName(name) ..
inout이란 키워드도 지난번 부스트캠프 다른 캠퍼 분 코드 컴파일링 시 본 적이 있다. 무슨 기능인지 그 당시엔 넘어갔지만 이번에 정리하고 가고자 한다. 생각보다 쉬운 개념이었다. import UIKit // 여기서는 name을 직접 수정하는 일이 없는데, 만약 수정하려고 하면 에러가 뜬다. // 왜냐하면 매개변수는 기본적으로 let으로 설정되어 있기 때문이다. func sayName(_ name: String){ print("안녕?! 난 \(name) 라고 해") } // 이렇게 inout 키워드를 매개변수의 type 앞에 적어주면 해당 매개변수의 값을 메소드 내에서 변경이 가능하다. func sayHi(_ name: inout String){ name = "개발하는 " + name print("안녕..
Swift에는 여러 Collection을 제공해주는데 그 중 하나가 Dictionary 타입이다. 이 딕셔너리 타입을 초기화를 할 때는 어떻게 하는지 정리해두고자 한다. let phoneCount:[String:Int] = [:] let phoneCount:[String:Int] = [String:Int]() let phoneCount = [String:Int]() let phoneCount = Dictionary()
일단 클로저는 내가 부스트캠프를 하면서 배웠던 것 중 가장 중요한 Swift 문법 중 하나라고 생각했다. 특히, 이것을 전혀 모르고 있었던 것이 내가 다른 캠퍼들의 코드를 이해하는데에 자꾸 걸림돌이 되었었다. 그래서 이번엔 클로저를 정리해보도록 하겠다. 먼저 내가 이해한 클로저는 사실 메소드와 비슷한 개념이라고 보았다. 일단, 클로저를 사용하는 예제들을 위주로 보자. import UIKit // String을 반환하는 클로저 let myName : String = { // 여기서 return되는 값이 myName으로 들어가진다. return "제라스" }() print(myName) // String을 받아서 다른 이름으로 return 하는 클로저 let playingName : (String) -> S..
최근 부스트캠프를 하면서 정말 다른 언어에서 자주 써봤지만 가장 많이 헷갈렸던 타입이 열거형(enum)이었다. 이에 대한 활용 정리가 필요할 것 같아서 정리해본다. // 이렇게 여러개의 case로 나눠서도 작성할 수 있고, enum Country { case Seoul case Incheon case Daegu case Busan } // 이렇게 한번에 한 줄로 작성할 수도 있다. enum Country { case Seoul, Incheon, Daegu, Busan } 근데 만약에 내가 각 Case에 대해 값을 배정해두고 싶다면, // 이렇게 각 case에 대해 값을 배정해둘 수 있다. enum Country: Int { case Seoul = 1 case Incheon = 2 case Daegu = ..