iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
Traditional version of MVC as a compound pattern
Cocoa version of MVC as a compound design pattern
Documentクラスはモデル・コントローラ
Documentクラスの例
class Document {
var version: String
private var _uniqueIdentifier: String
var uniqueIdentifier: String {
return _uniqueIdentifier
}
static let sharedInstance: Document = {
let instance = Document()
return instance
}()
init() {
let infoDictionary = Bundle.main.infoDictionary! as Dictionary
self.version = infoDictionary["CFBundleShortVersionString"]! as! String
self._uniqueIdentifier = ""
}
deinit {
}
func load() {
loadDefaults()
}
func save() {
updateDefaults()
}
private func clearDefaults() {
let userDefaults = UserDefaults.standard
if userDefaults.object(forKey: "version") != nil {
userDefaults.removeObject(forKey: "version")
}
if userDefaults.object(forKey: "uniqueIdentifier") != nil {
userDefaults.removeObject(forKey: "uniqueIdentifier")
}
}
private func updateDefaults() {
let userDefaults = UserDefaults.standard
var versionString: String = ""
if userDefaults.object(forKey: "version") != nil {
versionString = userDefaults.object(forKey: "version") as! String
}
if versionString.compare(self.version) != .orderedSame {
userDefaults.setValue(self.version, forKey: "version")
userDefaults.synchronize()
}
var uniqueIdentifier: String = ""
if userDefaults.object(forKey: "uniqueIdentifier") != nil {
uniqueIdentifier = userDefaults.object(forKey: "uniqueIdentifier") as! String
}
if uniqueIdentifier.compare(self.uniqueIdentifier) != .orderedSame {
userDefaults.setValue(self.uniqueIdentifier, forKey: "uniqueIdentifier")
userDefaults.synchronize()
}
}
private func loadDefaults() {
let userDefaults = UserDefaults.standard
var versionString: String = ""
if userDefaults.object(forKey: "version") != nil {
versionString = userDefaults.object(forKey: "version") as! String
}
if versionString.compare(self.version) != .orderedSame {
/* バージョン不一致対応 */
clearDefaults()
_uniqueIdentifier = UUID.init().uuidString
}
else {
/* 読み出し */
if userDefaults.object(forKey: "uniqueIdentifier") != nil {
_uniqueIdentifier = userDefaults.object(forKey: "uniqueIdentifier") as! String
}
}
}
private func modelDir() -> String {
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
if paths.count < 1 {
return ""
}
var path = paths[0]
path = path.appending(".model")
return path
}
private func modelPath() -> String {
let path = modelDir().appending("/model.dat")
return path;
}
}
シングルトンを使わない例
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
public let document = Document()
:
}
let delegate = UIApplication.shared.delegate as! AppDelegate
let document = delegate.document
print(document)