通过自定义运算符在主线程上快速执行闭包



显然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!}

显然,类型为"()"的运算符不能应用于"()->()"有人知道如何申报才能让它发挥作用吗?

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

考虑以下示例代码

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

Swift现在期望~>是一个二进制操作数,因为存在空白。

二进制运算符'~>'不能应用于类型为"Int"one_answers"()->()'

如果在第一行后插入;

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

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

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

这只是意味着事实上必须没有空白。

修复

删除空白:

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

最新更新