@bitfield

Тег objc в блоге bitfield

bitfield

СЯУ о селекторе self

[[[[[@"x" self] self] self] self] self]
bitfield

постоянно проигрываю с макросов RAC() и RACAble()

bitfield

NSButton.state не умеет в KVO. Надо делать RACObserve(checkbox.cell, state).

bitfield

У нас было 3 бинарника, 75 папок с исходниками, 5 плюсовых библиотек, пол-инсталла boost и целое множество ресурсов всех сортов и расцветок, а также MagicalRecord, Lumberjack и ReactiveCocoa в Podfile. Не то, чтобы это был необходимый запас для программы. Но если уже начал собирать код, становится трудно остановиться. Единственное, что вызывало у меня опасение -- это ReactiveCocoa. Нет ничего более беспомощного, безответственного и испорченного, чем функциональное реактивное программирование в Objective-C. Я знал, что рано или поздно мы перейдем и на эту дрянь.

bitfield

Если я сделаю метод для замены подстроки в строке (алиас к stringByReplacingString:withString:) с именем s:: — буду ли я гореть в аду?

msg = [msg s:"{name}":name];
bitfield

Особенности национальной локализации

About пʼять хвилин remaining

bitfield
[@"a123456789012345678901234567890a" isLike:@"*ab"]

жрет 100% cpu и, похоже, уходит в бесконечный цикл.

bitfield

tfw выдают пафосные фразы вроде

If a programming language does not have a URI module in its standard library, run, don't walk, to a real language that does.

когда API, чтобы поменять/выставить параметр в запросе без секса со строками доступно только в iOS 8/OSX 10.10.

bitfield

Запилил в текущий проект промисы. Для сравнения, до:

-(void) p_pluckHamsSinceLastPluckWithCompletion:(BarPluckHamsCompletion) completion
{
  NSDate * date = [NSUserDefaults standardUserDefaults].lastPluckDate;

  XXXHamPlucker plucker = ^(XXXPluckSession * session, XXXFoo *foo, XXXPluckConsumer consumer) {
    [session searchBoosSinceDate:date withFoo:foo completion:^(NSError *error, NSIndexSet * boos) {
      if (error)
        return consumer(error, nil);
      [Bar filterBoos:boos withFoo:foo completion:^(NSIndexSet *boos) {
        [session pluckHamsWithBoos:boos withFoo:foo completion:^(NSError * error, NSArray * hams) {
          if (error)
            return consumer(error, nil);
          [Bar filterHams:hams withFoo:foo completion:^(NSArray *hams) {
            consumer(nil, hams);
          }];
        }];
      }];
    }];
  };

  [self p_pluckHamsUsingPlucker:plucker completionHandler:completion];
}

После

-(XXXPromise *) p_pluckHamsSinceLastPluck {
  NSDate * date = [NSUserDefaults standardUserDefaults].lastPluckDate;

  XXXHamPlucker plucker = ^(XXXPluckSession * session, XXXFoo * foo) {
    XXXPromise * promise = [session searchBoosSinceDate:date withFoo:foo];
    return promise.thenPromise(^(NSIndexSet * boos){
      return [Bar filterBoos:boos withFoo:foo];
    }).thenPromise(^(NSIndexSet * boos){
      return [session pluckHamsWithBoos:boos withFoo:foo];
    }).thenPromise(^(NSArray * hams) {
      return [Bar filterHams:hams withFoo:foo];
    });
  };

  return [self p_pluckHamsUsing:plucker];
}

Промисы свои, написал часа за 3-4. Смотрел RXPromise и PromiseKit, но они не умеют то, что мне нужно.

bitfield

раз:

- (PMKPromise *(^)(void(^)(void)))finally;

два:

+ (instancetype):(id)foo;
bitfield

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.