学习文章
原理图
说明
- 单例模式人人用过,严格的单例模式很少有人实现
- 严格的单例模式指的是无法通过常规的 alloc init 方法来生成对象,派生出来的子类也不能产生出对象,而只能通过单例的方法获取到对象
源码
严格的单例模式不应该被继承,不应该被复制,不应该被new等等,只应该独此一家.
Singleton.swift
import Foundation
enum SingletonError : ErrorType {
case CannotBeInherited
}
class Singleton {
/* --不能被子类调用-- */
static func sharedInstance() throws -> Singleton {
guard self == Singleton.self else {
print("--------Can't be inherited !--------")
throw SingletonError.CannotBeInherited
}
struct Static {
static let sharedInstance = Singleton()
}
return Static.sharedInstance
}
private init() {
}
}