我是Swift 2的新手,我从来没有在Apple开发过。 Objective C看起来很难看,你必须编写很多代码,所以Swift很喜欢因为语法类似于Java和C而且我的问题在这里:
在Java中,您可以通过以下方式定义类:
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)
}
答案 0 :(得分:0)
大多数情况下,这种语法(匿名类的内联定义)存在是因为Java不允许闭包或lambda函数的概念,因此如果要传递要调用的函数,则必须传递类的实例然后使用函数声明内联。
相比之下,与大多数现代语言一样,Swift具有特定的闭包语法,允许您直接将可执行块传递给另一个例程,本质上它允许您将函数视为第一类语言实体。
所以,最重要的是,不,Swift不允许你提出的构造,但它确实为主要用例提供了相同的功能。与您的示例最相似的代码是:
dispatch_async(...) {
Code to be executed asynchronously here
}
这真的只是语法糖:
dispatch_async(..., {
Your code here
})
由于匿名对象仅作为单个对象的持有者创建,因此实际上不需要该对象,或者实际上不需要该类,因此也不需要语法。 Java语法只有轻微优势的唯一一次是被调用者需要维护多个相关的回调。