2016-09-07 86 views
3

我做的強孰弱舞蹈SWIFT是這樣的:斯威夫特後衛自

dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), { [weak self] in 
    guard let `self` = self else { 
     return 
    } 
    self.doSomething(1) 
}) 

在此之前,我用的是strongSelf,而不是`self`。在一個網站上我已經看到我可以使用這個字符。

但是這個角色在Swift中做了什麼?沒有這個我不能分配給自己。爲什麼這個工作?使用它是一個好習慣嗎?

+1

相關:http://stackoverflow.com/questions/31315358/use-reserved-keyword-a-enum-case。 –

+1

在未來版本的Swift中有一個建議允許'guard let self = self else {return}':https://github.com/apple/swift-evolution/blob/master/proposals/0079-upgrade-self -from-weak-to-strong.md,而且你的代碼工作被認爲是Swift編譯器中的一個錯誤:https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007425 html的。 –

回答

6

Swift Programming Language

介紹了一份說明,說以下內容:

如果你需要給一個常量或變量相同的名稱作爲保留 斯威夫特關鍵字,關鍵字與反引號(`)當使用它作爲名稱時 。但是,請避免使用關鍵字作爲名稱,除非您絕對沒有選擇 。

編輯:

我這樣做是例如strongSelf像前面那樣使用任何其他名稱的方式。因爲最終`self`和strongSelf都將是一些變量。所以我建議如果我們可以使用其他一些很好的變量名稱。

+1

謝謝,這是一個很好的信息。我們是否有任何關於使用像我描述的守衛的良好做法的信息?我看到蘋果不鼓勵使用這樣的關鍵詞,但在這種情況下,它確實似乎是一個很好的解決方案。你怎麼看? –