Gestures화면을 통해 전달된 사용자 입력iOS에는 사용자 입력을 제스처로 인식하는 추상 레이어 존재제스처는 UIGuestureRecognizer라는 클래스의 인스턴스에 의해 인식됨UIGuestureRecognizer자체는 추상적. 생성할 일 없음. 구체화된 서브클래스 사용원하는 제스처 종류를 쓸 때 그 서브클래스들을 생성함(PanGestureRecaognizer, PinchRecognizer 등..) Recognizer 클래스 사용의 두 가지 스탭(GestureRecognizer, GestureHandler)1. 원하는 GestureRecognizer 생성 및 UIView 객체가 Recognizer를 받아서 해당 제스처를 인식할 수 있도록 설정 (Controller가 담당)2. Recognize..
1. Text폰트로 표현되는 UIBezierPath의 모음UIBezierPath가 그려지는 높은 수준 방법 View에 UILabel을 하위뷰로 얹고 싶지 않고 drawRect로 텍스트를 그리는 방법NSAttributedString(Objective-C 클래스) 각각의 문자를 어떻게 그릴지에 대한 속성으로 구성모든 문자에 대한 설정값(컬러, 폰트 등)이 담긴 Dictionary를 가지고 있음let text = NSAttributedString("hello")text.drawAtPoint(aCGPoint)let textSize: CGSize = text.size스위프트에서 사용을 어렵게 만드는 두가지 차이점 1. 값이 변할 수 있는 특성을 var과 let으로 할 수 없음NSAttributedString을 ..
1. ViewView는 좌표공간위계구조를 가지고 있음서로 겹칠수도 있음모든 뷰는 하나의 슈퍼뷰를 가짐여러개의 자식뷰를 가질 수 있음 * UIWindowThe UIView at the very, very top of the view hirearchy(even includes status bar)가장 상위의 뷰 계층에 존재앱마다 한개씩 존재 뷰를 넣고 빼는 동작을 하는 함수addSubview는 부모뷰에, removeFromSuperView는 삭제될 그 뷰에 호출addSubview(aView: UIView) //sent to aView's(soon to be) superviewremoveFromSuperView() //this is sent to be the view you want to remove(n..
1. AnyObject프로토콜. Objective-C와 호환을 위해 사용Objective-C에서는 id라는 타입(모르는 클래스 객체에 대한 포인터) 존재Swift에서도 위와 동일한 의미로 사용됨 AnyObject은 어떨때 사용?1. prepareForSegue와 같이 인자의 타입이 적어도 두 개 이상 될 수 있을 때 사용func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject)func touchDigit(sender: AnyObject) 2. 쿠키(cookie) 반환 시쿠키는 상태를 저장하고 뭔가를 기억하고 있다가 돌려주는 값. 어떤 값인지 알 수 없다var cookie: AnyObject AnyObject은 어떻게 사용?우리가 아는 타입으로 변..
Initialization인자없는 init을 자동으로 생성init을 만든다면 인자없는 자동생성 init을 사용하지 않는다struct MyStruct { var x: Int var y: String}let foo = init(x: 5, y: "hello") init 안에서 할 수 있는 것프로퍼티 값 설정(심지어 이미 기본값을 가지고 있어도 설정 가능)상수도 설정 가능여러 init메소드에서 다른 init메소드를 한개만 호출 가능부모 클래스의 init도 호출 가능 init 안에서 반드시 해주어야 할 것init이 끝날 때는 모든 프로퍼티가 값을 가져야 함 클래스에서는 init메소드로 두개의 타입이 존재 - 지정초기화를 직접 구현하지 않아도 되는 경우: 생성자를 작성하지 않아도 모든 프로퍼티가 기본값을..
1. Arrayvar a = Array()var a = [String()let animals = ["Giraffe", "Cow", "Doggie", "Bird"] //var로 변경해야 append 가능animals.append("Ostrich")let animal = animals[5] //crash(array out of bounds)//enumerating an Arrayfor animal in animals { print("\(animal)")} Array 메소드1. filterArray의 모든 요소마다 클로져를 실행하고 true로 반환되는 요소를 포함시켜 반환filter(includeElement: (T) -> Bool) -> [T]let bigNumbers = [2, 47, 118, 5, 9]...
1. Method 파라미터 이름 : 외부이름, 내부이름을 가짐 내부이름: 메소드 내부에서 사용될 지역변수 이름. 메소드 호출시 사용되는 것 아님 외부이름: 호출 시 호출하는 사람이 사용 외부이름을 지정하지 않으면 기본적으로 내부이름이 된다 func foo(externalFirst first: Int, externalSecond second: Double){ var sum = 0.0 for _ in 0...first { sum += second } } func bar(){ let result = foo(externalFirst: 123, externalSecond; 5.5) } 외부이름을 사용하고 싶지 않으면 _ 사용 _는 default로 넣어주기 때문에 func foo(first : Int)로 지정시 f..
1. Optional 옵셔널은 모든 타입의 옵셔널이 될 수 있다 enum Optional { case None case Some(T) } let x: String ?= nil let x = Optional.None let x: String ? = "hello" let x = Optional.Some("hello") switch x { case Some(let value): y = value case None: } 옵셔널은 사슬처럼 연결될 수 있다(옵셔널 체이닝) 두 코드는 서로 같은 기능을 한다 옵셔널 체이닝이 되어있으면 앞에서부터 추출할 수 있는 값을 추출하고 추출할 수 없다면 전체표현에서 nil을 반환한다 그래서 x는 int일수도 optional일수도 있기 때문에 optional int 타입이 된다...
KxCoding의 Mastering RxSwift 유투브를 보며 공부한 내용을 정리 just, of, from (1) just - 하나의 항목을 방출하는 Observable 생성 시 사용 ※ 중요 : 파라미터로 전달한 요소를 그대로 방출 [코드] let disposeBag = DisposeBag() let element = "😀" Observable.just(element) .subscribe { event in print(event) } .disposed(by: disposeBag) Observable.just([1, 2, 3]) .subscribe { event in print(event) } .disposed(by: disposeBag) [출력] next(😀) completed next([1, 2,..
KxCoding의 Mastering RxSwift 유투브를 보며 공부한 내용을 정리 RxSwift의 장점 [RxSwift Github 샘플 코드] Observable.combineLatest(firstName.rx.text, lastName.rx.text) { $0 + " " + $1 } .map { "Greetings, \($0)" } .bind(to: greetingLabel.rx.text - 두개의 텍스트 필드 값을 공백으로 연결 후 "Greetings"를 앞에 추가, 이를 Label에 출력 - 이를 rxSwift 없이 작성한다면 3라인의 코드로 불가 viewModel .rows .bind(to: resultsTableView.rx.items(cellIdentifier: "WikipediaSearc..
- Total
- Today
- Yesterday