
Obj-C 에서의 SEL 은 Swift에서 addTarget 의 @selector 랑 똑같음.
형태는 아래와 같음.
SEL btnSelector = @selector(testBtnClicked:);
SEL 는 어디에 사용이 될까??
방금 앞서 말했듯이, Swift 에서 addTarget 에 들어가는 @selector 과 동일하다고 했음.
그럼 먼저 함수를 만들어 보아야겠죠??
아래 함수는 반환 값이 없는 함수이며, sender 로 UIButton 을 입력받는 함수임.
그리고 NSStringFromSelector(_cmd) 는 현재 실행하고 있는 함수의 이름을 가져오는 것이고, _cmd 는 현재 실행되고 있는 셀렉터의 이름을 가져오는 것임.
- (void)onTestBtnClicked:(UIButton *) sender {
// NSStringFromSelector(_cmd) : 현재 실행하고 있는 함수 이름을 가져옴.
NSLog(@"name: %@ , btnTitle: %@", NSStringFromSelector(_cmd),
sender.titleLabel.text);
}
함수를 만들었으니, 함수를 버튼과 인식을 시켜봅시당
코드는 아래와 같음.
간략하게 설명을 드리면, 위에 만들어두었던 함수를 SEL로 만들기 위해서는 @selector(함수) 이런식으로 포장을 해주어야함.
SEL btnSelector = @selector(onTestBtnClicked:);
[_selectorTestButton addTarget:self action:btnSelector forControlEvents:UIControlEventTouchUpInside];
근데, 우리는 왜 위 코드처럼 귀찮게 SEL로 포장해서 사용을 해야할까??
그걸 이해하기 위해서는 addTarget 의 문장 구성을 이해해야함.
- (void)addTarget:(id)target
action:(SEL)action
forControlEvents:(UIControlEvents)controlEvents;
addTarget : (id)target 라고 되어 있는데, 여기에는 간단히 self 로 쓰면됨.
action : (SEL) action 으로 되어 있는게 보임? (SEL) 로 만들어줘야 정상적으로 빌드가 되기 때문에, 우리는 @selector 에 함수를 넣어서 SEL을 만들어줘야함.
forControlEvents:(UIControlEvents)controlEvents 는 Swift 에서와 마찬가지로 .touchupInside 와 똑같다고 생각하면됨.