Я хочу динамически добавлять код в блок-переменную или объединять или конкатенировать блок с другим блоком. Это возможно?Можете ли вы добавить код в переменную блока Objective-C?
ответ
Возможно ли это?
Нет, но вы можете создать коллекцию блоков и выполнить их последовательно.
Не могли бы вы привести пример назначения блока коллекции? Нужно ли быть c-массивом, поскольку блок не является объектом? Или вы можете каким-то образом обернуть блок внутри другого объекта для хранения в NSMutableArray? – sean
Не требуется упаковка - [блок - объект Objective-C] (https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxOverview.html#//apple_ref/doc/UID/TP40007502-СН3-SW2). Вы можете [хранить их в NSArray] (http://stackoverflow.com/q/7997666/643383) (или другой коллекции Obj-C), или вы можете создать другой блок, который принимает два или более блоков в качестве параметров и выполняет их один за другим, поскольку dasblinkenlight хорошо иллюстрирует. – Caleb
Как узнать, когда блок с индексом n завершен, чтобы мы могли перейти на n + 1? – sean
Один из способов сделать это - создать блок, который называет блок «расширенным» перед выполнением собственных функций.
Например, рассмотрим пример ниже, который добавляет ведение журнала функциональные возможности для произвольного блока передается в него:
typedef void (^MyBlock)(int);
-(MyBlock) expand:(MyBlock)nested {
return ^(int x) {
nested(x);
NSLog("The value of x = %d", x);
};
}
Кумулятивный эффект вызова блока производимого expand:
является то, что из вызова исходного блока, а затем операция из расширенного блока. Вы можете взять его дальше, чтобы создать appendBlock
метод:
-(MyBlock) appendBlock:(MyBlock)second toBlock:(MyBlock)first {
return ^(int x) {
first(x);
second(x);
};
}
Sure - просто создать новый блок, который делает использование оригинала в любой композиционном, как вы хотите. Если у вас есть block1
и block2
, вы можете создать:
someCodeBefore = ^myBlockType(block1) {
someCode()
thatIWantBefore();
block1();
}
someCodeAfter = ^myBlockType(block1) {
block1();
someCode()
thatIWantAfterBlock1();
}
composedBlocks = ^myBlockType(block1, block2) {
block1();
block2();
}
Просто убедитесь, что вы копируете блоки правильно.
Это действительно не то же самое, что объединить/объединить блоки вместе. У вас все еще есть отдельные блоки, каждый со своим собственным состоянием, а не один блок с общим состоянием. – Caleb
Но, поскольку блоки непрозрачны, что это значит «делить состояние»? Вы не могли увидеть ни одного из них, даже если бы он был общим. –
Точно - вы можете использовать блоки в комбинации, и у вас может быть один блок, содержащий другие блоки, но вы не можете * объединить * два блока в один блок (это то, что я понял, о котором спрашивали) , – Caleb
- 1. Можете ли вы передать переменную в код компилятора C#?
- 2. Можете ли вы добавить код конкретной платформы в PhoneGap?
- 3. NodeJS: можете ли вы передать переменную «require»?
- 4. Можете ли вы переносить переменную $ _POST?
- 5. Можете ли вы условно передать переменную Twig
- 6. Java: Можете ли вы понизить переменную?
- 7. Можете ли вы добавить список в словарь?
- 8. Можете ли вы сбросить статическую переменную?
- 9. Можете ли вы сохранить $ (this) как переменную?
- 10. Можете ли вы сделать прозрачный цветной код?
- 11. Можете ли вы добавить переменные в словарь
- 12. Вы можете добавить список массива в переменную в Java
- 13. Gridworld - Можете ли вы добавить звук?
- 14. Можете ли вы обнаружить несовместимый код?
- 15. Можете ли вы тестировать модулированный код?
- 16. Можете ли вы понять этот код кода?
- 17. Можете ли вы объяснить мне этот код?
- 18. Можете ли вы объяснить этот код?
- 19. Можете ли вы реорганизовать этот код?
- 20. Можете ли вы добавить переменные внутри «cout»
- 21. Можете ли вы использовать переменную в URL-адресе?
- 22. Можете ли вы передать переменную в VALUE в SQL?
- 23. Вы можете различать тестовую переменную?
- 24. Преобразовать код PHP в ObjectiveC
- 25. Можете ли вы добавить параметры к действиям?
- 26. Можете ли вы добавить UIView над UINavigationBar?
- 27. Можете ли вы добавить ярлык ESC Key?
- 28. Можете ли вы добавить атрибуты объекта динамически?
- 29. Можете ли вы добавить класс к свойству класса VBA
- 30. Можете ли вы повторно использовать код в SSIS? Можете ли вы программно изменить источник/цель?
Возможный дубликат [Что происходит с блоком во время компиляции, и могу ли я создать его во время выполнения?] (Http://stackoverflow.com/questions/16323089/what-happens-to-a-block-at- compile-time-and-can-i-create-one-at-runtime) – Caleb