목록개발/Objective-C -> Swift (17)
Stacking Fire
Monad [|mɑ:nӕd;|moʊn-](철학)모나드(무엇으로도 나눌 수 없는 궁극적인 실체)Oxford Advanced Learner's English-Korean Dictionary ...왜 이 개념이 이렇게 쓰였는지는 아직 모르겠습니다. 더 공부해 보겠습니다. 컨텍스트 맥락. 어떤 위치에 어떤 값이 존재할 수 있는 맥락. 옵셔널은 맥락은 존재하지만 값이 필연적으로 존재하지는 않을 수도 있는 부분에 들어감. 값과 컨텍스트는 다르다. 그래서 옵셔널은 값을 대신할 수 없다! func add3(to int: Int) -> Int { return int + 3 } add3(to: Optional(2)) // 오류! // 값이 들어가야 하는 곳에 컨텍스트만이 들어갔다. 함수객체 함수객체란 맵을 적용할 수 있는..
map, filter, reduce는 객체에 데이터를 보내서 받는 전통적인 형태의 함수가 아닙니다. 클로저로 다른 함수를 받아 데이터셋을 변형시키는 고차 함수입니다. 옵저빙 프로퍼티와 함께 함수형 프로그래밍 '스러운' 기능을 지원하는 것입니다. 아래는 단순히 사용법이지만, 체인처럼 걸어서 사용할 수 있습니다. 맵 for-in처럼 각 요소에 특정한 행동을 수행해준 후에 그 각각 처리된 요소를 이용한 컬렉션을 만들어줍니다. 반환하지 않는 클로저를 전달하면 그냥 반복문으로 사용 가능. //긴 버전 var doubled: [Int] = numbers.map { (i: Int) -> Int in return i * 2 } print(doubled) //짧은 버전 var dbld: [Int] = numbers.ma..
옵셔널 체이닝 윗물이 맑으면 아랫물은 괜찮을 수도 있다. 체이닝의 끝은 늘 Optional! 바인딩과 함께 써 보도록 하자. 백견이 불여일RUN //옵셔널인 놈에게만 궁금증을 가진다! ash?.bag.badgeCase?.append(grayBadge) //바인딩과 함께 바인딩! if let firstBadge = ash?.bag.badgeCase?[0] { print(firstBadge) } 빠른 종료 guard let 한 코드 블럭에서 여러 개의 옵셔널을 다루어야 할 때가 있다. 쓸 때마다 언 함수, 메서드, 반복문 등 특정 블록 내에서만 사용이 가능. 반환값이 있는 함수 내에서 사용할 경우 반환값을 요구하기도 한다. func greet(person: [String: String]) { guard le..
Objective-C의 블록 같은 녀석입니다....만 좀더 빈번히, 또 쉽게 사용됩니다. 함수형 언어에서 함수를 담당하고 있는 클로저!! 처음에 그 표현법 때문에 좀 당황을 먹었는데요, 스위프트를 겪으면서 쓰다 보니 점점 괜찮아져서, 이제는 클로저로 처리 가능한 것은 왠만하면 클로저로 처리하게 됐네요. 표현법 통상적으로는 아래와 같음. {(parameters) -> ReturnType implementation return returnValue //있을 경우만! } 예전의 코드. 생략의 HELL //아래 names 어레이를 역순으로 정렬하는 코드들. let names:[String] = ["wizplan", "eric", "yagom", "jenny"] //풀버전. first와 second를 가지고 어느..
Objective-C에서는 은닉화가 아예 파일 구조로 분리가 되어 있었고, 필요할 때 필요한 파일만을 연결해서 사용했습니다. 그런데 Swift에서는 파일 구분이 사라졌고 게다가 한 프로젝트 전체가 하나의 네임스페이스가 됩니다. 이에 따라, Swift 은닉화는 의미에 따라 자연스럽게 되는 것이 아니라 일부러 해주어야 하는 구조가 된 겁니다. 접근 제어는 사실 문법이 너무 쉬운지라 그냥 그런가보다 하고 지나가지만, 제대로 판단해서 넣어주지 않으면 Objective-C보다 더 정리가 안 된 코드가 되고 맙니다. 접근 수준 open : class에서만 사용됨. 모듈 밖에서도 상속이 가능... 즉 상속이 가능한 클래스에서만. public : 모듈 외부에서 접근이 가능. 상속은 불가능! intrenal : 모듈 내..
클래스, 구조체, 열거형의 인스턴스를 생성하는 것. 반환값이 없음. 왜 굳이. func도 사용하지 않음 구현부 혹은 익스텐션에 위치 (클래스의 지정 이니셜라이저의 경우 불가) enum의 이니셜라이저 반드시 케이스 중 하나로 이니셜라이즈 해야 함. init에서 self가 사용 가능. enum TestCase { case firstCase case secondCase case defaultCase init() { self = .defaultCase } } 프로퍼티의 기본값 기본값(default value) : initial value가 아니다. 외부에서 따로 초깃값을 지정해주지 않을 때 초깃값이 되는 것이 기본값이다. 혼란을 방지하기 위해 기본 초깃값(default initail value)으로 쓰는 게 좋..
단어 강박 메서드는 클래스, 구조체, 열거형에 관련된 함수. Methods are functions that are associated with a particular type. Classes, structures, and enumerations can all define instance methods, which encapsulate specific tasks and functionality for working with an instance of a given type. Classes, structures, and enumerations can also define type methods, which are associated with the type itself. Type methods are si..
프로퍼티 단어 강박 프로퍼티는 클래스, 구조체, 열거형의 관련값 Properties associate values with a particular class, structure, or enumeration. Stored properties store constant and variable values as part of an instance, whereas computed properties calculate (rather than store) a value. Computed properties are provided by classes, structures, and enumerations. Stored properties are provided only by classes and structures. ..
Swift에서는 모든 것이 클래스가 아닙니다. 사실 생각해보면 다 그럴 필요는 없죠! 어떨 때 클래스를 쓰고 어떨 때 구조체를 쓰는지 잘 생각해서 적용해서 예쁜 코드를 만들어 봅시다! 특징 클래스뿐만 아니라 구조체도 객체 지향 스타일로 활용. 하나의 소스 파일 안에서 여러 개의 클래스나 구조체를 선언할 수 있으며, 중첩해서 클래스 안에 클래스, 구조체 안에 구조체를 중첩해서 정의하고 선언할 수도 있습니다. 구조체 정의 타입이므로 대문자 카멜케이스 적용 memberwise initializer : 구조체의 프로퍼티 이름으로 자동으로 init 메서드가 생성됨. struct YourStructName { var someProperty: String mutating func someMethod(someParam..
GitHub에서 보기 거 얘긴 많이 들었는데... 그래서 그게 뭐죠? Swift에 대해 이야기할 때 가장 자주 등장하는 주제 중 하나가 옵셔널입니다. 결론부터 말하면 옵셔널이란 '값의 부재를 표현하는 Generic Enumeration'인데요... 뭔 소린지 파봤습니다. 와닿게 해보려고 옵셔널이 만들어진 경위를 상상해 보았는데요. 기존의 Objective-C에서는 특정 클래스의 인터페이스를 만들 때, nil이 들어가도 되는지 안 되는지를 꼭 주석으로 명시해 주어야 했습니다. 왜냐면 실제 값을 할당해주지 않았어도 선언을 했다면 그대로 불러다 쓸 수 있었고, 빈 값인지 아닌지를 확신할 수 없어도 빌드에 실패하지는 않기 때문이죠. ...그런데 뭐든 그렇지만 사용자(개발언어의 사용자. 개발자.)가 설명서(주석,..