2016-11-23 2 views
-2

Моя проблема в том, что у меня есть класс констант, который используется почти в каждом классе в приложении, поэтому я создал его объект в AppDelegate n, чтобы он мог получить к ним доступ. I не хочу создавать объект констант каждый раз, когда каждый раз. Какой будет лучший подход, пожалуйста, совет.Как получить ссылку 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- delegate-in-swift) – Vinodh

+0

Поиск SO перед добавлением повторяющихся вопросов – 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, пожалуйста, проверьте мой ответ, потому что вы, вероятно, должны воздерживаться от использования синглета для вашего usecase – KaraBenNemsi

+0

@igor. Я думаю, что это лучший способ создать singlton, если вы хотите его использовать: 'final class Singleton { static let sharedInstance: Singleton = { пусть экземпляр = Singleton() возврата экземпляра }() частный Init() {// сделать его закрытым, так что никто не может инициализировать Singleton от внешнего } } ' – KaraBenNemsi

0

Возможно, вы не должны использовать одноэлементный режим, потому что вы просто используете класс для строк. Вместо этого вы должны, вероятно, пойти примерно на следующее:

struct LocalizationConstants { 
    static let settings = NSLocalizedString("Settings", comment: "") 
    static let main = NSLocalizedString("Main", comment: "") 
    static let someString = "value" 
} 
Смежные вопросы