목록개발 (43)
Stacking Fire
결국 프로그래밍이라는 것은, 적절한 타이밍에 적절한 행동을 적절한 대상에게 시키는 일입니다. 그리고 iOS 앱이란 App 과 view로 이루어져 있기에, 그 각각의 생명 주기를 아는 것은 어떤 일을 어떻게 시키는지 아는 것만큼이나 중요합니다.아래는 간단히 2개의 뷰로 이루어진 테스트용 앱에서 각 라이프사이클 메서드에 로그를 찍은 결과입니다. awakeFromNib - 첫번째 뷰가 Nib에서 깨어났습니다. didFinishLaunchingWithOptions 앱이 옵션과 함께 런치되었습니다. --------------------------------------------------------------------- loadView - 첫 번째 뷰가 로드됩니다. viewDidLoad - 첫번째 뷰가 로드되었..
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 : 모듈 내..
패스트캠퍼스에서 딜리게이트에 관련된 수업을 진행하던 도중, 텍스트필드의 글자수를 제한하는 것에 관련된 예제를 진행한 적이 있었습니다. 최초에 나온 답변에 대해서 다시 버그를 찾아내고, 그 버그를 픽스하고 하면서 Delegate에 대해서 알아볼 수 있는 굉장히 유익한 시간이었는데요. 해결하고자 하는 요건은 아래와 같았습니다. 입력되는 글자수가 10자를 넘지 않을 것. 입력시 커서가 텍스트 내에 어디에 있든 상관없이 작동할 것. 복사해온 스트링을 넣어도 알아서 거부할 것. 삭제도 문제없이 될 것. 단순히 잘 해결했다는 느낌을 떠나서, 딜리게이트의 구조를 정확히 알고 또 구현하고자 하는 상황의 의미를 그대로 코드로 자아낸 예제라서 기억에 많이 남습니다. 당시 배운 것들을 정리합니다. 풀이와 설명 결론부터 말하..
들어가면서 모바일에서 정보를 입력 받는 뷰의 경우... 안 그래도 좁은 화면에 키보드까지 덮여 있기 때문에 사용자가 불편함을 느껴 키보드를 내리려고 할 때가 많습니다. 키보드에 액세서리 뷰를 추가하는 방법도 있긴 하지만 잠깐 화면을 볼 때마다 뭔가 결정하는 듯한 뉘앙스를 주는 거 같아서, 그냥 화면 내에 인터랙션이 없는 곳을 탭해서 내리고 싶을 때가 있죠. 그럴 때 쉽게 적용할 수 있는 방식을 소개합니다! 1. UIViewController의 extension 만들기 extension UIViewController { func endEditingModeWhenUserTapOutside() { let tap = UITapGestureRecognizer(target: self, action: #selecto..
저는 UINavigationController를 좋아합니다. Cocoa Touch의 근간과 같은 컨트롤러죠. 이름부터도 iOS의 보편적인 Navigation을 책임지고 있습니다. 그러다보니 iPhone 사용자들은 UINavigationBar에 참 익숙한데요. 그러다 보니 딱히 UINavagationController의 기능이 필요없는 뷰에서도 UINavigationBar에 기능을 넣는 경우가 있습니다. 그런데 그냥 UINavigationBar만을 올리면, 네비게이션바와 스테이터스 바 사이가 붕 뜨는 문제가 있습니다.오늘은 이것을 해결하는 팁을 소개해 보겠습니다. 1. 우선 UINavigationBarDelegate를 연결해 줍니다. 2. ViewController에도 추가해 줍니다. class ViewC..
클래스, 구조체, 열거형의 인스턴스를 생성하는 것. 반환값이 없음. 왜 굳이. func도 사용하지 않음 구현부 혹은 익스텐션에 위치 (클래스의 지정 이니셜라이저의 경우 불가) enum의 이니셜라이저 반드시 케이스 중 하나로 이니셜라이즈 해야 함. init에서 self가 사용 가능. enum TestCase { case firstCase case secondCase case defaultCase init() { self = .defaultCase } } 프로퍼티의 기본값 기본값(default value) : initial value가 아니다. 외부에서 따로 초깃값을 지정해주지 않을 때 초깃값이 되는 것이 기본값이다. 혼란을 방지하기 위해 기본 초깃값(default initail value)으로 쓰는 게 좋..
Realm을 이용해서 간단하게 주소록을 만들어 봤습니다.(Dependancy Manager는 Carthage를 사용했습니다. 설정법은 여기) 했던 예제 코드입니다 :) (2017. 7. 3. 14시에 수정하였습니다.) ScreenShots 구현부 1.Object 서브클래스 만들기 Realm을 프로젝트에 추가하면 자동으로 Object라는 클래스를 사용할 수 있게 됩니다. 굉장히 당당한 이름이네요... NSObject가 마치 외부 라이브러리처럼 보이게 하는 Realm의 위엄! import Realm import RealmSwift class Contact: Object { ///'dynamic var'로 프로퍼티를 설정해 줍니다. dynamic var personID: Int = 0 dynamic var n..
단어 강박 메서드는 클래스, 구조체, 열거형에 관련된 함수. 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..
6월 28일, FastCampus에서 2기 기수강 개발자인 이봉원님(GiftBot)님의 특강이 진행되었습니다. 크게 두 가지 부분에 대해 강의 진행하셨는데요. 첫 번째가 CocoaPods 등 디펜던시 매니저 관련 활용법이고, 두 번째는 요즘이라기엔 뭐하고 계속 핫한 Realm에 대한 활용법이었습니다.두 가지 다 내용이 좋아서. 인상적인 것을 정리놓으려고 합니다. 카르타고? 카르타고는 이번에 처음 알게 된 디펜던시 매니저인데요. 코코아팟과 동일한 목적을 위해 사용하지만, 컴파일 타이밍이 다릅니다. 프로젝트에 코드로 추가하는 것이 아니라 컴파일된 바이너리를 등록해서 쓰는 방식인데요. 이 방식을 통해 수정사항이 발생할 리가 거의 없는 외부 라이브러리 컴파일을 내 프로젝트 수정할 때마다 매번 컴파일하는 비효율을..