方案一

class FileManager: NSObject {

    static private(set) var shared = FileManager()

  

  func doSomething() {

  }

 

}

static 自带 lazy 属性.因此在你第一次调用前 FileManager 不会被生成. 同时它是全局的.生成后一直存在.

private(set) 该前缀禁止外部对  FileManager 进行赋值. 但你在外部仍然可以获取到该单例对象.

在你需要FileManager 时 可以按下方例子调用.

例  FileManager.shared.doSomething() 

 

方案二

 

class FileManager: NSObject {

 

    static private var manager = FileManager()

    

    class func shared() -> FileManager {

        return manager

    }

    

    func doSomething() {

        

    }

    

}

与方案一不同的是该方案多了一个 shared() 函数来获取  FileManager 单例对象 

同时 方案一中的 private(set) 变成了 private 使外部无法直接获取单例对象.

调用案例  FileManager.shared().doSomething()