реактивный связующий массив bool для установки нескольких строк текста - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть statusArray и для отображения текстов UILabel

на основе значения Bool

скажем, 1 показывают someString, а затем 0 показывают некоторые другие строки

как мне следуетиспользовать rac как ReactiveCocoa?

1 Ответ

0 голосов
/ 01 ноября 2019

В настоящее время я думаю только о двух способах:

  1. Прослушивание bool переменных

Вам необходимо использовать переменную bool в качестве свойства.

@weakify(self);
[RACObserve(self, bool) subscribeNext:^(id  _Nullable x) {
     @strongify(self);
     self.label.text = [x boolValue] ? @"a" : @"b";
}];

Это приведет к циклическим ссылкам, поэтому используются weakify и strongify, которые также являются частью ReactiveCocoa, определенных определений и использования в RACEXTScope.h

/**
 * Creates \c __weak shadow variables for each of the variables provided as
 * arguments, which can later be made strong again with #strongify.
 *
 * This is typically used to weakly reference variables in a block, but then
 * ensure that the variables stay alive during the actual execution of the block
 * (if they were live upon entry).
 *
 * See #strongify for an example of usage.
 */
#define weakify(...) \
    rac_keywordify \
    metamacro_foreach_cxt(rac_weakify_,, __weak, __VA_ARGS__)

/**
 * Strongly references each of the variables provided as arguments, which must
 * have previously been passed to #weakify.
 *
 * The strong references created will shadow the original variable names, such
 * that the original names can be used without issue (and a significantly
 * reduced risk of retain cycles) in the current scope.
 *
 * @code

    id foo = [[NSObject alloc] init];
    id bar = [[NSObject alloc] init];

    @weakify(foo, bar);

    // this block will not keep 'foo' or 'bar' alive
    BOOL (^matchesFooOrBar)(id) = ^ BOOL (id obj){
        // but now, upon entry, 'foo' and 'bar' will stay alive until the block has
        // finished executing
        @strongify(foo, bar);

        return [foo isEqual:obj] || [bar isEqual:obj];
    };

 * @endcode
 */
#define strongify(...) \
    rac_keywordify \
    _Pragma("clang diagnostic push") \
    _Pragma("clang diagnostic ignored \"-Wshadow\"") \
    metamacro_foreach(rac_strongify_,, __VA_ARGS__) \
    _Pragma("clang diagnostic pop")
Bind UILabel.text, преобразование bool сигнала в string назначение
RAC(self.label, text) = [RACObserve(self, bool) map:^id _Nullable(id  _Nullable value) {
     return [value boolValue] ? @"a" : @"b";
}];
...