독립 Doctument 클래스

Traditional version of MVC as a compound pattern

Cocoa version of MVC as a compound design pattern

  • iOS 5에서 UIDocument 클래스를 준비했지만 사양이 약간 지나쳤습니다.
  • 필자는 이전부터 자신의 Doctument 유형을 준비했다.
  • Doocument 클래스는 모델 컨트롤러입니다.

    Doocument 클래스의 예
    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)
    
    【관련 정보】
    BUKURO.swift
    코코아 학습회 관동
    MOSA
    코코아 연습장

    좋은 웹페이지 즐겨찾기