我想動態地將代碼添加到塊變量,或合併或連接一個塊與另一個塊。這可能嗎?你可以將代碼追加到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