通过自定义运算符

时间:2016-01-10 15:10:35

标签: ios multithreading swift closures

显然Xcode不允许我从后台线程修改UI(iOS)。我必须输入:

let res = somethingReturningaString()
dispatch_async(dispatch_get_main_queue(), {
        self.txtError.text = res!
})

我的想法是:'嘿,让我们简化生活并定义一个自定义操作符,这样我就可以键入:'

prefix operator ~> {}

prefix func ~> (closure: ()-> ()) {
    dispatch_async(dispatch_get_main_queue(), closure)
}
//usage example
~> {self.txtError.text = res!}

显然是类型'()'的运营商不能应用于'() - >()' 有没有人知道如何宣布这项工作?

1 个答案:

答案 0 :(得分:1)

swift编译器在那里有点困惑。你不能将一元运算符与其操作数分开,这意味着中间不能有空格

考虑以下示例代码

let k = 12
~> {
    self.txtError.text = res!
}

Swift现在希望~>是一个二进制操作数,因为有一个空格。

  

二元运算符'〜>'不能应用于' Int'类型的操作数和'() - > ()'

如果您在第一行之后插入;

let k = 12;
~> {
    self.txtError.text = res!
}

你会收到一些更有帮助的东西:

  

一元运算符不能与其操作数

分开

这意味着实际上必须没有空格。

修复

删除空格:

~>{ self.txtError.text = res! }