簡體   English   中英

在主線程槽自定義運算符上快速執行關閉

[英]Swift execute closure on main thread trough custom operator

顯然,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!}

顯然類型'()'的運算符不能應用於'()->()',有人知道如何聲明它來使它起作用嗎?

敏捷的編譯器在那里有些困惑。 您絕對不能將一元運算符與其操作數分開,這意味着兩者之間一定不能有空格

考慮以下示例代碼

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

Swift現在期望~>是一個二進制操作數,因為存在空格。

二進制運算符'〜>'不能應用於'Int'和'()->()'類型的操作數

如果插入; 第一行之后:

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

您會得到一些幫助:

一元運算符不能與其操作數分開

這僅意味着實際上必須沒有空格。

固定

刪除空格:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM