Передача данных из ViewController 2 (назначение) в viewController 1 (Source) является более интересной вещью. Предполагая, что вы используете storyBoard, это все способы, которые я узнал:
Это уже обсуждалось здесь.
Я обнаружил, что есть еще несколько способов:
- Использование обратных вызовов блока:
использовать его в методе 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.
Надеюсь, я что-то добавил к обсуждению.
:) Приветствия.
Списки (а также векторы и карты) не являются хорошим выбором структуры данных для поиска на основе значений (будет линейное время), поэтому clojure.core не имеет таких функций .
Наборы обеспечивают быстрый поиск на основе значений с помощью "contains?", Так что как насчет
(defn foo [value & flags]
(let [flags (set flags)]
(if (contains? flags :add-one)
(inc value)
value)))
Если не будет более одного флага, вы можете использовать деструктурирование следующим образом:
(defn foo [value & [flag]] …)
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.
clojure.contrib.def
includes the defnk
-macro, which makes defining functions with keyword-arguments easier.