如何使用 swift 中的参数创建单例:
How to create singleton with parameter in swift:
我有以下 class:
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()
但是我不知道它是怎么做到的,有谁知道这是怎么做到的吗?
顺便说一句:我看到了这个 link:
但是那里的单例创建是不同的。
我们可以向您展示如何将参数添加到单例声明中,但这并不是一个好主意。单例背后的整个思想是,它在何处实例化并不重要,您可以在任何地方使用它。如果您在代码的两个不同位置使用不同的参数调用此单例,这意味着什么?你有一个竞争条件,行为可能会根据首次遇到单身人士的地点和方式而改变。
不相关,但 dispatch_once
是多余的。 static
变量已与 dispatch_once
一起使用。请参阅 http://developer.apple.com/swift/blog/?id=7 末尾的讨论(这主要针对全局变量,但正如他们附带指出的那样,它也适用于 static
变量)。此外,在 Swift 1.2 中,我们现在可以使用静态 class 变量,也不再需要 struct
,
我有以下 class:
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()
但是我不知道它是怎么做到的,有谁知道这是怎么做到的吗?
顺便说一句:我看到了这个 link:
我们可以向您展示如何将参数添加到单例声明中,但这并不是一个好主意。单例背后的整个思想是,它在何处实例化并不重要,您可以在任何地方使用它。如果您在代码的两个不同位置使用不同的参数调用此单例,这意味着什么?你有一个竞争条件,行为可能会根据首次遇到单身人士的地点和方式而改变。
不相关,但 dispatch_once
是多余的。 static
变量已与 dispatch_once
一起使用。请参阅 http://developer.apple.com/swift/blog/?id=7 末尾的讨论(这主要针对全局变量,但正如他们附带指出的那样,它也适用于 static
变量)。此外,在 Swift 1.2 中,我们现在可以使用静态 class 变量,也不再需要 struct
,