如何翻译成 Swift Java 的匿名 class?

How translate to Swift an anonymous class of Java?

我是 Swift 2 的新手,我从未在 Apple 开发过。 Objective C 看起来很丑,你必须写很多代码,所以 Swift 喜欢,因为语法类似于 Java 和 C,这里是我的问题:

在Java中你可以这样定义一个class:

new Thread(){
  public run(){
      // anything    
  }
}.start();

那么,Swift能做到吗?以及如何?

感谢和问候


解决方案

    let myThread=NSThread(target: self, selector: "backgroundWork", object: nil)
    myThread.start()

}

func backgroundWork(){

    for (self.counter=0;self.counter<10;self.counter++){
        //self.myLabel.text = String(self.counter) // Not update UI
        self.performSelectorOnMainThread( Selector("updateLabel"), withObject: nil, waitUntilDone: false )
        sleep(3)
    }

}

func updateLabel(){
    self.myLabel.text = String(self.counter)
}

存在这种语法(匿名 classes 的内联定义)主要是因为 Java 不允许闭包或 lambda 函数的概念,因此如果您想传递要调用的函数你必须传递一个 class 的实例和函数然后声明为内联。

相比之下,Swift,像大多数现代语言一样,具有特定的闭包语法,允许您直接将可执行块传递给另一个例程,本质上它允许您将函数视为第一种 class 语言实体。

所以,最重要的是,不,Swift 不允许您所询问的构造,但它确实为主要用例提供了等效的功能。与您的示例最相似的代码是:

dispatch_async(...) {
    Code to be executed asynchronously here
}

这实际上只是语法糖:

dispatch_async(..., {
    Your code here
})

由于匿名对象只是作为单个对象的持有者创建的,因此实际上不需要对象,或者 class,因此不需要语法。 Java 语法唯一的优势是被调用者需要维护多个相关的回调。