2015-02-07 4 views
0

Как бы вы написали следующее в swift?Общий экземпляр swift

static ClassName* singleCommon = nil; 
+ (ClassName*)sharedInstance { 
    @synchronized(singleCommon) { 
     if(!singleCommon) singleCommon = [[ClassName alloc] init]; 
    } 
    return singleCommon; 
} 

ответ

1

Хорошим решением является:

class Singleton { 
    class var sharedInstance: Singleton { 
     struct Static { 
      static var instance: Singleton? 
      static var token: dispatch_once_t = 0 
     } 

     dispatch_once(&Static.token) { 
      Static.instance = Singleton() 
     } 

     return Static.instance! 
    } 
} 

Решение и объяснение, исходящее из: http://code.martinrue.com

1

Я обычно использую sharedInstance в Swift, как это:

private let _sharedInstance = SomeClass() 

class SomeClass: NSObject { 

    class var sharedInstance: SomeClass { 
     get { 
      return _sharedInstance 
     } 
    } 

} 

Вот является Блогпост обсуждать этот вопрос: http://thatthinginswift.com/singletons/

+0

плохой запах, ваш '_sharedInstance' выходит из класса, и он может конфликтовать с другой реализацией, если они разрешают делать то же самое, что и вы здесь – ViTUu

Смежные вопросы