2016-11-23 44 views
-2

我的問題是我有常量類,它幾乎在應用程序中的每個類中使用,所以我通過它在AppDelegate中創建了它的對象n想要訪問它們。我不想創建對象常量,每次在哪裏,哪些是最好的方法,請諮詢。如何獲取AppDelegate的參考

class AppDelegate: UIResponder, UIApplicationDelegate { 
public var constants = Constants() 
//created object once in app delegate 
} 

class Utility 
{ 
let delegate = UIApplication.shared.delegate as! AppDelegate //getting  null here 
let constants = delegate. constants 
}` 
+2

'UIApplicationDelegate'已經是一個獨特的實例。千萬不要創建它的副本。只需使用其參考。 –

+4

[我如何獲得對Swift中應用程序委託的引用?](http://stackoverflow.com/questions/24046164/how-do-i-get-a-reference-to-the-app-快速上傳) – Vinodh

+0

在添加重複問題之前進行搜索 – Vinodh

回答

0

這應該創建一個對象的AppDelegate:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

您可能要創建一個單獨的類來代替。

class MySingleton : NSObject 
{ 
    class var sharedInstance :MySingleton 
    { 
    struct Singleton 
    { 
     static let instance = MySingleton() 
    } 

    return Singleton.instance 
    } 

    final let myVar = "String" 
} 

然後通過創建一個對象來訪問屬性:

let appSingleton = MySingleton.sharedInstance 
appSingleton.myVar 

難道這就是你想幹什麼?

+0

是啊謝謝,這對我有幫助。 –

+0

@NitishaSharma請檢查我的答案,因爲你應該避免使用單例作爲你的用例 – KaraBenNemsi

+0

@igor我認爲這是一個更好的方法來創建一個單例如果你想使用一個:'final class Singleton {static} let let sharedInstance:辛格爾頓= { 讓實例=辛格爾頓() 回報實例 }() 私有的init(){// 讓它私有,這樣沒有人可以從外面 初始化辛格爾頓} }' – KaraBenNemsi

0

您應該不要使用單例,因爲您只是使用字符串類。相反,你應該這樣做:

struct LocalizationConstants { 
    static let settings = NSLocalizedString("Settings", comment: "") 
    static let main = NSLocalizedString("Main", comment: "") 
    static let someString = "value" 
}