2015-02-07 130 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