RAC 초보자 사용(1)

5817 단어
RAC는 기본적으로 쓰는데 사실 별거 아니에요.
RAC이란?쉽게 말하면 RAC는 제3자 라이브러리로서 당신의 코드 과정을 크게 간소화할 수 있습니다.
공식적으로는 Reactive Cocoa(약칭 RAC)는 GitHub에서 시작된 iOS와 OS X 개발에 응용된 새로운 프레임워크라고 한다.RAC는 함수식 프로그래밍과 응답식 프로그래밍의 특성을 가지고 있다.
왜 우리는 RAC를 배워야 합니까?
우리의 개발 효율을 높이기 위해RAC는 특정 상황에서 개발할 때 코드를 크게 간소화할 수 있을 뿐만 아니라 현재로서는 안전하고 믿을 만하다.
RAC 환경 구성
4platform :ios, ‘7.0’ target “RACText” do pod 'ReactiveCocoa','~>2.5’ end 여기서 주의해야 할 점은 RAC 버전 문제입니다. 아직 Swift를 배우지 않았기 때문에 저는 OC로 프로그램을 작성했습니다. 최신 버전의 RAC는 Swift를 지원하지만 OC 프로그램에 최신 버전의 RAC를 설치하면 뛸 수 없기 때문에 2.5.0 버전 이하의 RAC를 추천합니다.
RAC 사용
1.target-action
RAC의 가장 기본적인 입문 사용 기교는 사건에 대한 감청이다.
PS:iOS 개발에서 우리가 말한 클릭 이벤트는 사실 target-action이다. iOS 개발을 접한 사람들은 UIControl Event Touch UpInside를 낯설게 보지 않는다. 이것이 바로 누르고 놓는 동작이다.UIButton뿐만 아니라 UITExtField에도 목표-동작 모드가 있다.
사용하기 전에 인용 헤더 파일을 잊지 마세요~
#import 

다음은 가장 중요한 RAC 코드입니다.이것은 대비이다
UIButton  
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(100, 100, 100, 100);
    btn.backgroundColor = [UIColor blueColor];
//    [btn addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
    [[btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x){
        NSLog(@"change:%@",x);
    }];
    [self.view addSubview:btn];
}

- (void)btnClicked
{
    NSLog(@"btnClicked");
}
UITextFild  

[[self.textFild rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(id x){
    NSLog(@"change");
}];

이렇게 짧은 두 줄 코드.그는 textFild의 UIControl EventEditingChanged 이벤트를 감청하고 이벤트가 발생할 때 방법인 NSLog을 실현하는 기능을 실현했다.그래서 우리는 이 코드를 모델로 RAC의 사용을 할 수 있다. 일거수일투족이고 모든ddTarget는 대동소이하다.textFild의 텍스트 변경 감청에도 더 간단한 쓰기
[[self.textFild rac_textSignal] subscribeNext:^(id x) {
    NSLog(@"%@",x);
}];

이렇게 하면 TextFild가 바뀔 때마다 바뀐 결과를 출력합니다.
그리고 예를 들어 우리의 어떤 label에 제스처 동작을 추가하면 우리는 간단한 RAC 코드로 완성할 수 있다
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
[[tap rac_gestureSignal] subscribeNext:^(id x) {
    NSLog(@"tap");
}];
[self.view addGestureRecognizer:tap];

2. 에이전트가 RAC로 에이전트를 쓰는 것은 한계가 있다. 에이전트는 반환값이void인 에이전트 방법만 실현할 수 있다.
우선 우리가 왜 RAC로 에이전트를 써야 하는지 알아야 한다.답: 코드 간소화!네, 코드를 간소화하기 위해서 왜 제가 이 부분을 강조해야 하는지는 프록시 방법에서 RAC의 장점을 깊이 느꼈기 때문입니다.처음에 나도 RAC를 배우려고 애쓰고 싶지 않았다. 예를 들어 만약에 하나의 View에 여러 개의 AlertView가 있다면 모든 AlertView는 여러 개의 단추가 있고 단추마다 자신의 클릭 이벤트가 있다면 나는 어떻게 써야 합니까?나는 모든 단추에 표시를 해야 할 뿐만 아니라, 모든 AlertView도 표시를 해야 한다고 생각했다. 그리고 프록시 클릭 이벤트에 여러 가지 방법을 추가하면 코드가 구리고 길어진다.그럼 RAC에서 에이전트를 어떻게 쓰는지 봅시다.
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"  " message:@"  " delegate:self cancelButtonTitle:@" YES" otherButtonTitles:@"NO", nil];
[[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:) fromProtocol:@protocol(UIAlertViewDelegate)] subscribeNext:^(RACTuple *tuple) {
    NSLog(@"%@",tuple.first);
    NSLog(@"%@",tuple.second);
    NSLog(@"%@",tuple.third);
}];
[alertView show];

RAC의 문장을 봅시다. @selector는 이번 사건을 감청하는 방법인fromProtocol은 의존하는 에이전트를 가리킨다.여기 Block에 RACtuple이 하나 있는데 그는 하나의 집합 클래스에 해당한다. 그의 밑에 있는 퍼스트, second 등이 바로 클래스의 각 매개 변수이다. 나는 여기에 AlertView의 두 번째 단추인other를 눌러서 출력했다.
 >
 1
 (null)

투플을 볼 수 있어요.second는 ButtonAtIndex의 Button 시퀀스 번호입니다.그러면 위에서 언급한 예에 대해 switch로 각 단추에 방법을 추가할 수 있다. 이런 코드는 이해하기 쉽고 후기 유지보수가 쉽다.
물론, AlertView 에이전트에도 간단한 코드가 있습니다.
[[alertView rac_buttonClickedSignal] subscribeNext:^(id x) {
    NSLog(@"%@",x);
}];
   x    Button    ,              。

3. 알림은 우리의 개발에서 알림도 흔히 사용하는 기능이다. 주요한 응용 장면은 한 페이지에서 데이터를 재전송하려면 모델을 업데이트해야 하지만 창고로 돌아갈 때 인터페이스로 돌아가는 데이터를 갱신하지 않는다. 이때 알림으로 다른 페이지의 데이터를 갱신할 수 있다. 물론 우리는 다른 페이지의 ViewDid Appear 방법에서 데이터를 갱신할 수도 있지만 그것은 주제넘은 말이다.
여기에 쓴 데모가 바로 내가 상술한 상황이다.
우선, 어떤 페이지에서 우리는 통지를 보내야 하는데, 여기가 가장 기본적인 통지의 작성법이다.postdata라는 알림을 보내고 그룹 데이터 Array를 전송합니다.
NSMutableArray *dataArray = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"notificationData" object:dataArray];

받아들이는 페이지에서 관찰자를 늘리고 수조를 받아들여야 하는데, 이때 우리의 RAC가 도움이 된다.
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"notificationData" object:nil] subscribeNext:^(NSNotification *notification) {
    NSLog(@"%@", notification.name);
    NSLog(@"%@", notification.object);
}];

이 페이지가postdata라는 알림을 감청할 때 그는 Block의 방법을 실행합니다. 물론 이곳의 매개 변수를 idx로 바꿔도 됩니다. 여기는NSNotification으로 그 유형을 강조합니다.콘솔의 출력을 봅시다.
 notificationData
 (
1,
2,
3
)

보이다object는 우리가 원하는 그룹입니다. 물론 모델도 전송할 수 있습니다.특히, RAC의 알림은remove observer가 필요하지 않습니다. 왜냐하면racdd 방법에서 그는remove를 썼다.
4. KVO RAC에서 KVO는 대부분이 매크로 정의이기 때문에 코드가 매우 간결하다. 쉽게 말하면 RACObserve(TARGET, KEYPATH)이라는 형식이다. TARGET는 감청 목표이고 KEYPATH는 관찰해야 하는 속성 값이다. 여기서 간단한 예를 들어 UIScrollView가 굴러가면 success를 출력한다.
UIScrollView *scrolView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 200, 400)];
scrolView.contentSize = CGSizeMake(200, 800);
scrolView.backgroundColor = [UIColor greenColor];
[self.view addSubview:scrolView];
[RACObserve(scrolView, contentOffset) subscribeNext:^(id x) {
    NSLog(@"success");
}];

됐어. 이런 거 배웠으니까 나도 RAC 할 줄 아는 사람이라고 해도 될 것 같아.

좋은 웹페이지 즐겨찾기