// 在Document路径下判断,什么这里返回值是可选的字符串值呢,这里可选是因为返回值可能为nil,其他返回值为可选类型的同样是这个规则。 func localDocumentsPath(fileName:String) ->String?{ return createNeeded(fileName) } // 文件不存在则创建为 func createNeeded(fileName:String) ->String?{ let fileManage = NSFileManager.defaultManager() let filePath = returnDocumentsPathWithFileName(fileName) if !fileManage.fileExistsAtPath(filePath!){ let bundlePath = NSBundle.mainBundle().resourcePath let defaultFilePath = bundlePath! + "/\(NoteFile)" do{ try fileManage.copyItemAtPath(defaultFilePath,toPath: filePath!) }catch{ print("错误写入文件!") } } return filePath } // 文件Document路径 func returnDocumentsPathWithFileName(fileName:String) ->String?{ let documentDir = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,true).last let documentPath = "\(documentDir!)/\(fileName)" return documentPath }
两个静态方法分别进行文件的读和写,写的时候在静态方法中调用实例方法会发现调不了,什么鬼。。。 然后你会思考怎么调,其实在静态方法里可以用很多方式来调用实例方法,这里给出一种方式:
class func readCurrentFile(fileName:String) -> String?{ let currentClassObject = FileManagerEngine() let filePath = currentClassObject.localDocumentsPath(localDataFile) let fileManage = NSFileManager.defaultManager() var content: String? if fileManage.fileExistsAtPath(filePath!){ let tmpData = NSData.init(contentsOfFile: filePath!) content = String.init(data: tmpData!,encoding: NSUTF8StringEncoding) } return content } class func writeNoteToFileWithData(stringData:String) { let currentClassObject = FileManagerEngine() let filePath = currentClassObject.localDocumentsPath(localDataFile) let writeData = NSMutableData.init(contentsOfFile: filePath!) writeData!.appendData(stringData.dataUsingEncoding(NSUTF8StringEncoding)!) writeData!.writeToFile(filePath!,atomically: true) }
可以看出Swift也不怎么难,重点要掌握其中的核心思想:面向对象,简洁。