我有以下课程:
class FeedDataManager: URLManagerdelegate {
let TAG: String = "FeedDataManager"
weak var mDelegate: KeyboardViewController?
var mModelManager: ModelManager!
var mURLManager: UrlManager!
var mGetNewsTimer: NSTimer?
var mFeedsArray: Array<News>!
var mManagedObjectContext: NSManagedObjectContext!
var mPersistentStoreCoordinator: NSPersistentStoreCoordinator!
var mManagedObjectModel: NSManagedObjectModel!
class var sharedInstance: FeedDataManager {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: FeedDataManager? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = FeedDataManager()
}
return Static.instance!
}
init (aDelegate: KeyboardViewController) {
self.mDelegate = aDelegate
}
}
问题:如果您查看init方法,您将看到它应该将我要存储在单例中的委托指针作为参数接收,因此基本上我需要将此参数传递给此行:
Static.instance = FeedDataManager()
但是我不知道它是如何完成的,有谁知道该怎么做?
顺便说一句:我看到了此链接:Singleton和带有参数的init,但是那里的singleton创建是不同的。
我们可以向您展示如何在单例声明中添加参数,但这并不是一个好主意。单例背后的整个想法是,无论实例化在哪里,都可以在任何地方使用它。如果您在代码中的两个不同位置使用不同的参数调用此单例,那意味着什么?您有一个竞赛条件,行为可能会根据第一次遇到的位置和方式而改变。
无关,但是dispatch_once
是多余的。该static
变量已经采用具有dispatch_once
。请参阅http://developer.apple.com/swift/blog/?id=7末尾的讨论(这主要是针对全局变量的,但正如他们在括号中指出的那样,它也适用于static
变量)。此外,在Swift 1.2中,我们现在可以拥有静态的类变量,也无需使用struct
,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句