2017-04-08 41 views
1

我在Mozilla Firefox的iOS版本庫中發現了這個。爲什麼不直接在Swift中使用靜態變量?

static let WebServerSharedInstance = WebServer() 

class var sharedInstance: WebServer { 
    return WebServerSharedInstance 
} 

爲什麼你會創建一個新的變量,只是返回時,你可以做同樣在這樣一條線相同的變量?

static let sharedInstance = WebServer() 
+0

我修改了我的答案,請確保您仍然認爲它已被接受。 – Sulthan

+0

你的回答非常好,給出了兩個原因。謝謝你讓我高興! – ntoonio

回答

2

我特地到代碼中,我想我有誤解的背景:

class WebServer { 
    static let WebServerSharedInstance = WebServer() 

    class var sharedInstance: WebServer { 
     return WebServerSharedInstance 
    } 
} 

雖然你總是可以使用WebServer.WebServerSharedInstance訪問單,的WebServer子類可以覆蓋sharedInstance

class MyServer : WebServer { 
    override class var sharedInstance: MyServer { 
     return MyServer() 
    } 
} 

但是,我沒有在代碼中找到示例,因此下面的原始答案可能是正確的。

原來的答覆:

你是對的。絕對沒有理由這樣做。

這可能是Objective-C直接翻譯的,它使用類似的單例語法。

此外,在Swift 1.0中,我們不太確定如何創建單例,以及類是否爲static let是線程安全的。

0

一個建議是,WebServerSharedInstance是全局變量在文件的頂層宣佈其只要在文件生命是隻要在程序運行的生活 - >您可以使用該變量在所有其他文件中

+0

爲什麼''WebServerSharedInstance''不是一個全局變量? – ntoonio

+0

WebServerSharedInstance是一個全局變量,您可以在程序的所有其他文件中使用它。 –

+0

那你爲什麼需要第二個變量? – ntoonio

0

我不確定上下文。但讓我解釋的主要區別之一

VS

之間
// 1 
class var sharedInstance: WebServer { 
    return WebServerSharedInstance 
} 

// 2 
static let sharedInstance = WebServer() 

1是每次你訪問它獲取評估,而2得到延遲初始化和評估只計算一次的變量。

如果在你的代碼後來有人抽調WebServerSharedInstance

1將返回新的價值,同時2將回頭率初始值,如果它得到了前初始化。

+0

你不知道什麼是計算變量!可以計算一個變量。這意味着變量,而不是一個值,具有功能。一個函數,即setter,在變量被賦值時被調用。另一個函數getter在引用變量時被調用。 –

+0

不確定你的意思。但僅供參考。 '您可以通過移除get關鍵字及其大括號來簡化只讀計算屬性的聲明。 – MadNik

+0

抱歉,您的權利不正確。不知道你可以刪除關鍵字 –

相關問題