如何翻译成 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 语法唯一的优势是被调用者需要维护多个相关的回调。
我是 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 语法唯一的优势是被调用者需要维护多个相关的回调。