Compare block based Foundation and UIKit stuff vs RAC implementation - for science.
Objective-C Ruby
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Pods
SHRACComparison.xcodeproj
SHRACComparison.xcworkspace
SHRACComparison
SHRACComparisonTests
Podfile
Podfile.lock
README.md

README.md

#####First Sample

  __weak typeof(self) weakSelf = self;
  [self SH_addObserverForKeyPaths:@[@"username"] withOptions:kNilOptions block:^(__unused NSString *keyPath, __unused NSDictionary *change) {
    NSLog(@"%@", weakSelf.username);
    }];

#####Second Sample

  __weak typeof(self) weakSelf = self;
  [self SH_addObserverForKeyPaths:@[@"username"] withOptions:kNilOptions block:^(__unused NSString *keyPath, __unused  NSDictionary *change) {
  
    if([weakSelf.username hasPrefix:@"j"]) 
    NSLog(@"%@", weakSelf.username);
    
  }];
  

#####Third Sample

  __weak typeof(self) weakself = self;
  [self SH_addObserverForKeyPaths:@[@"password", @"passwordConfirm"] withOptions:kNilOptions block:^(__unused NSString *keyPath, __unused NSDictionary *change) {
    weakSelf.createEnabled = [weakSelf.password isEqualToString:caller.passwordConfirm];
  }];
  

#####Fourth Sample

  [self.btnSample SH_addControlEventTouchUpInsideWithBlock:^(__unused UIControl *sender) {
    NSLog(@"button was pressed!");
  }];

#####Fifth Sample

  __weak typeof(self) weakSelf
  [self.btnSample SH_addControlEventTouchUpInsideWithBlock:^(__unused UIControl *sender) {
    dispatch_group_t groupSignal = dispatch_group_create();
    [SHUser loginWithGroupSignal:groupSignal];
    dispatch_group_notify(groupSignal, dispatch_get_main_queue(), ^{ weakSelf.didLogin = YES; });
  }];
  
  [self SH_addObserverForKeyPaths:@[@"didLogin"] withOptions:kNilOptions block:^(__unused NSString *keyPath, __unused  NSDictionary *change) {
    if(weakSelf.didLogin) NSLog(@"Logged in successfully");
  }];
  
  [self.btnSample sendActionsForControlEvents:UIControlEventTouchUpInside];
  

#####Sixth Sample

  dispatch_group_t groupSignal = dispatch_group_create();
  [SHUser loginWithGroupSignal:groupSignal];
  [SHUser fetchFriendsWithGroupSignal:groupSignal];
  dispatch_group_notify(groupSignal, dispatch_get_main_queue(), ^{
    NSLog(@"They're both done!");
  });

#####Seventh Sample

  __block BOOL        isLoggedIn = NO;
  __weak typeof(self) weakSelf   = self;

  SHControlEventBlock validateTextFieldBlock = ^(__unused UIControl * sender){
    BOOL textFieldsNonEmpty = weakSelf.usernameTextField.text.length > 0 && weakSelf.passwordTextField.text.length > 0;
    BOOL readyToLogIn = [SHUser isLoggingIn] == NO && isLoggedIn == NO;
    weakSelf.logInButton.enabled = textFieldsNonEmpty && readyToLogIn;
  };
  
  [self.usernameTextField SH_addControlEvents:UIControlEventEditingChanged withBlock:validateTextFieldBlock];
  [self.passwordTextField SH_addControlEvents:UIControlEventEditingChanged withBlock:validateTextFieldBlock];
  
  [self.logInButton SH_addControlEventTouchUpInsideWithBlock:^(__unused UIControl *sender) {
    dispatch_group_t successSignal = dispatch_group_create();
    dispatch_group_t failureSignal = dispatch_group_create();

    [SHUser loginWithUsername:weakSelf.usernameTextField.text andPassword:weakSelf.passwordTextField.text
            withSuccessSignal:successSignal orFailureSignal:failureSignal];
    
    dispatch_group_notify(successSignal, dispatch_get_main_queue(), ^{
      isLoggedIn = YES;
      validateTextFieldBlock(nil);
    });
    
    dispatch_group_notify(failureSignal, dispatch_get_main_queue(), ^{
      NSLog(@"Error logging in!");
    });

  }];

#####collectionTransformSample

  typeof(sample) results = [[sample
                       SH_findAll:^BOOL(NSString * obj) {
                          return obj.length >= 2;
                        }]
                       SH_map:^id(NSString * obj) {
                         return [obj stringByAppendingString:@"foobar"];
                       }];