2015-02-07 196 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斯威夫特這樣的:

private let _sharedInstance = SomeClass() 

class SomeClass: NSObject { 

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

} 

這裏是一個博客帖子討論這個問題: http://thatthinginswift.com/singletons/

+0

它味道不好,你的'_sharedInstance'超出了課程範圍,如果它們解決了你在這裏做的問題,它可能與其他實現衝突 – ViTUu 2015-04-16 12:43:49