我想动态地将代码添加到块变量,或合并或连接一个块与另一个块。这可能吗?你可以将代码追加到Objective-C块变量吗?
回答
这可能吗?
不,但您可以创建块的集合并按顺序执行它们。
你会举一个例子给块分配一个集合吗?它是否需要是一个c数组,因为一个块不是一个obj?或者你可以以某种方式将一个块包装在另一个对象中以便存储到NSMutableArray中? – sean
无需包装 - [块是一个Objective-C对象](https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/Blocks/Articles/bxOverview.html#//apple_ref/doc/UID/TP40007502-CH3-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);
};
}
当然 - 只需要创建一个新的模块,这使得利用原有的在你喜欢的任何成分的方式。如果你有block1
和block2
,您可以创建:
someCodeBefore = ^myBlockType(block1) {
someCode()
thatIWantBefore();
block1();
}
someCodeAfter = ^myBlockType(block1) {
block1();
someCode()
thatIWantAfterBlock1();
}
composedBlocks = ^myBlockType(block1, block2) {
block1();
block2();
}
只要确保你能正确地复制块。
- 1. 你可以将字符串追加到PHP中的变量吗?
- 2. 你可以添加到一个SSIS对象变量,追加?
- 3. 将变量追加到变量中
- 4. 你可以附加键到数组变量像Python字典吗?
- 5. 你可以将汇编代码注入到exe文件中吗?
- 6. 你可以结合(追加)路径到对方吗?
- 7. 在VB.NET中你可以做一个任意的代码块吗?
- 8. 我可以将JavaScript变量传递给内联ASP.NET代码吗?
- 9. 追加到可变
- 10. 可以在代码点火器中追加搜索结果吗?
- 11. Javascript将变量添加到代码
- 12. Eclipse PDT可以自动将PHPDoc块添加到需要的代码中吗?
- 13. 这个代码块可以缩短吗?
- 14. 你可以增加流星的反应变量吗?
- 15. 你可以给变量声明添加一个条件吗?
- 16. 你可以在PhoneGap中添加平台特定的代码吗?
- 17. 你可以在C++的类中有变量的变量吗?
- 18. 你可以将图像的src改为Javascript中的变量吗?
- 19. 你可以在SQL中将变量传递给VALUE吗?
- 20. 是否可以将代码附加到CakePHP生成的document.ready块?
- 21. 将变量追加到python列表中
- 22. 将对象追加到变量
- 23. 将CSS追加到javascript变量
- 24. Javascript:如何将变量追加到url?
- 25. 你可以将LPTSTR投射到BSTR吗?
- 26. Android - 你能解释为什么你可以删除代码吗?
- 27. Python应用程序:你可以保护你的代码吗?
- 28. 我们可以追加一个字符串变量到ev.target.appendChild(document.getElementbyId(data))吗?
- 29. 您可以将Windows环境变量添加到.exe中吗?
- 30. 我可以使用AAPT将版本代码添加到APK吗?
可能的重复[在编译时块发生了什么,我可以在运行时创建一个吗?](http://stackoverflow.com/questions/16323089/what-happens-to-a-block-at-编译时和我可以创建一个运行时) – Caleb