我想开始在我的 iPhone 应用程序中使用块,因为它们真的很方便。
然而,由于所有应用程序也必须移植到 Android Java,我不确定这是否是一个好主意,因为我不知道如何轻松翻译这些块。
到目前为止,将 iOS 移植到 Android 是直截了当的,几乎是一行一行的——但是 iOS 块如何转换为 Java 呢?(当然我不是在谈论 Java 块)
非常感谢!
Java 允许匿名(未命名)类。更重要的是,他们可以扩展另一个类。当以这种方式使用时,它们类似于 Objective C 中的块。
您经常会看到定义的匿名类实现Runnable
或类似。这与块类似:提供匿名的内联代码定义,该代码在某处传递以供以后使用。
有关更多信息,请参阅此处的示例: http ://en.wikipedia.org/wiki/Closure_%28computer_science%29#Local_classes_.28Java.29
因此,在 Java 中,您可以编写如下内容:
doMyThing(new Runnable() {
void run() {
// your 'block' code here
}
});
该方法doMyThing
可以稍后调用 run 方法(或通过将 Runnable 传递给新的 Thread 对象等将其作为线程生成)
这里有进一步的讨论:
与 Objective-C 块相比,Java 匿名类的局限性
http://www.jondev.net/articles/Objective-C_blocks_vs_Java_Anonymous_Classes_or_Functions_(callbacks)
是的,遗憾的是 Java 没有闭包。对于每个块,您必须将其转换为某种回调机制。这是 Java 中需要的烦人的样板文件。你必须经常做类似的事情
button.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
doSomething();)
}
});
所以你必须创建一个匿名接口,重写方法,然后把你的东西放在那里,当你真正想做的是:
button.onClick(doSomething(););
那这个呢
yourObj.passABlock(new actionBlock() {
public void action() {
//Whatever
}
});
例如,Android 的Runnable类代表一个可以像上面一样执行的命令(这在一个单独的线程中)
它本质上是使用“命令”设计模式实现的。
public interface Command {
void execute();
}
这简单。
iOS 阻塞 - 它是关闭的。所以,Java也有闭包。我为这两个平台开发 - iOS 和 Android - 我知道 - 这是真的。
请查看维基百科文章http://en.wikipedia.org/wiki/Closure_(computer_science ) - 有适用于 iOS 和 Android 的代码示例。