Параметры Clojure с дополнительными флагами

Передача данных из ViewController 2 (назначение) в viewController 1 (Source) является более интересной вещью. Предполагая, что вы используете storyBoard, это все способы, которые я узнал:

  • Делегат
  • Уведомление
  • Пользователь по умолчанию
  • Singleton

Это уже обсуждалось здесь.

Я обнаружил, что есть еще несколько способов:

- Использование обратных вызовов блока:

использовать его в методе prepareForSegue в VC1

NextViewController *destinationVC = (NextViewController *) segue.destinationViewController;
[destinationVC setDidFinishUsingBlockCallback:^(NextViewController *destinationVC)
{
    self.blockLabel.text = destination.blockTextField.text;
}];

- Использование раскадровок Unwind (Exit)

Реализовать метод с аргументом UIStoryboardSegue в VC 1, например так:

-(IBAction)UnWindDone:(UIStoryboardSegue *)segue { }

В хуке storyBoard кнопка «возврат» к зеленой кнопке выхода (размотка) видеомагнитофона. Теперь у вас есть переход, который «возвращается», поэтому вы можете использовать свойство destinationViewController в prepareForSegue в VC2 и изменить любое свойство VC1, прежде чем оно вернется.

  • Еще один вариант использования раскадровок Undwind (Выход) - вы можете использовать метод, который вы написали в VC1

    -(IBAction)UnWindDone:(UIStoryboardSegue *)segue {
        NextViewController *nextViewController = segue.sourceViewController;
        self.unwindLabel.text = nextViewController.unwindPropertyPass;
    } 
    

    И в prepareForSegue из VC1 вы можете изменить любое свойство, которое вы хотите поделиться.

В обоих вариантах раскрутки вы можете установить свойство тега кнопки и проверить его в prepareForSegue.

Надеюсь, я что-то добавил к обсуждению.

:) Приветствия.

14
задан Kai 25 June 2009 в 22:06
поделиться

3 ответа

Списки (а также векторы и карты) не являются хорошим выбором структуры данных для поиска на основе значений (будет линейное время), поэтому clojure.core не имеет таких функций .

Наборы обеспечивают быстрый поиск на основе значений с помощью "contains?", Так что как насчет

(defn foo [value & flags]
  (let [flags (set flags)]
    (if (contains? flags :add-one)
      (inc value)
      value)))

Если не будет более одного флага, вы можете использовать деструктурирование следующим образом:

(defn foo [value & [flag]] …)
9
ответ дан 1 December 2019 в 14:12
поделиться

this is strictly speaking not the most efficient way of writing this but it's clear

(defn myfunction [value & flags] 
  (cond (contains? (set flags) :a) 1
        (contains? (set flags) :b) 2)

it could be more efficient to factor (set flags) up.

0
ответ дан 1 December 2019 в 14:12
поделиться

clojure.contrib.def includes the defnk-macro, which makes defining functions with keyword-arguments easier.

5
ответ дан 1 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: