diff --git a/SwiftFilePath.xcodeproj/project.pbxproj b/SwiftFilePath.xcodeproj/project.pbxproj index 1fb5966..78c273e 100644 --- a/SwiftFilePath.xcodeproj/project.pbxproj +++ b/SwiftFilePath.xcodeproj/project.pbxproj @@ -177,9 +177,11 @@ TargetAttributes = { CC7832EB1A610124005E77C3 = { CreatedOnToolsVersion = 6.1; + LastSwiftMigration = 0800; }; CC7832F61A610125005E77C3 = { CreatedOnToolsVersion = 6.1; + LastSwiftMigration = 0800; }; }; }; @@ -349,6 +351,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "me.nori0620.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -366,6 +369,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "me.nori0620.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -384,6 +388,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "me.nori0620.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -398,6 +403,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "me.nori0620.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/SwiftFilePath/Path.swift b/SwiftFilePath/Path.swift index 5dea3ca..bc126b4 100644 --- a/SwiftFilePath/Path.swift +++ b/SwiftFilePath/Path.swift @@ -10,15 +10,15 @@ public class Path { // MARK: - Class methods - public class func isDir(path:NSString) -> Bool { + public class func isDir(_ path:NSString) -> Bool { var isDirectory: ObjCBool = false - NSFileManager.defaultManager().fileExistsAtPath(path as String, isDirectory:&isDirectory) + FileManager.default.fileExists(atPath: path as String, isDirectory:&isDirectory) return isDirectory ? true : false } // MARK: - Instance properties and initializer - lazy var fileManager = NSFileManager.defaultManager() + lazy var fileManager = FileManager.default public let path_string:String @@ -37,7 +37,7 @@ public class Path { } public var exists: Bool { - return fileManager.fileExistsAtPath(path_string) + return fileManager.fileExists(atPath: path_string) } public var isDir: Bool { @@ -49,7 +49,7 @@ public class Path { } public var parent: Path{ - return Path( (path_string as NSString ).stringByDeletingLastPathComponent ) + return Path( (path_string as NSString ).deletingLastPathComponent ) } // MARK: - Instance methods @@ -63,7 +63,7 @@ public class Path { var error: NSError? let result: Bool do { - try fileManager.removeItemAtPath(path_string) + try fileManager.removeItem(atPath: path_string) result = true } catch let error1 as NSError { error = error1 @@ -74,12 +74,12 @@ public class Path { : Result(failure: error!); } - public func copyTo(toPath:Path) -> Result { + public func copyTo(_ toPath:Path) -> Result { assert(self.exists,"To copy file, file MUST be exists") var error: NSError? let result: Bool do { - try fileManager.copyItemAtPath(path_string, + try fileManager.copyItem(atPath: path_string, toPath: toPath.toString()) result = true } catch let error1 as NSError { @@ -91,12 +91,12 @@ public class Path { : Result(failure: error!) } - public func moveTo(toPath:Path) -> Result { + public func moveTo(_ toPath:Path) -> Result { assert(self.exists,"To move file, file MUST be exists") var error: NSError? let result: Bool do { - try fileManager.moveItemAtPath(path_string, + try fileManager.moveItem(atPath: path_string, toPath: toPath.toString()) result = true } catch let error1 as NSError { @@ -113,7 +113,7 @@ public class Path { var loadError: NSError? let result: [NSObject: AnyObject]? do { - result = try self.fileManager.attributesOfItemAtPath(path_string) + result = try self.fileManager.attributesOfItem(atPath: path_string) } catch let error as NSError { loadError = error result = nil diff --git a/SwiftFilePath/PathExtensionDir.swift b/SwiftFilePath/PathExtensionDir.swift index 52dfb2e..f196206 100644 --- a/SwiftFilePath/PathExtensionDir.swift +++ b/SwiftFilePath/PathExtensionDir.swift @@ -21,15 +21,19 @@ extension Path { } public class var documentsDir:Path { - return Path.userDomainOf(.DocumentDirectory) + return Path.userDomainOf(.documentDirectory) } public class var cacheDir:Path { - return Path.userDomainOf(.CachesDirectory) + return Path.userDomainOf(.cachesDirectory) } - private class func userDomainOf(pathEnum:NSSearchPathDirectory)->Path{ - let pathString = NSSearchPathForDirectoriesInDomains(pathEnum, .UserDomainMask, true)[0] + public class var applicationSupportDir: Path { + return Path.userDomainOf(.applicationSupportDirectory) + } + + public class func userDomainOf(_ pathEnum:FileManager.SearchPathDirectory)->Path{ + let pathString = NSSearchPathForDirectoriesInDomains(pathEnum, .userDomainMask, true)[0] return Path( pathString ) } @@ -37,7 +41,7 @@ extension Path { #endif // Add Dir Behavior to Path by extension -extension Path: SequenceType { +extension Path: Sequence { public subscript(filename: String) -> Path{ get { return self.content(filename) } @@ -49,7 +53,7 @@ extension Path: SequenceType { var loadError: NSError? let contents: [AnyObject]? do { - contents = try self.fileManager.contentsOfDirectoryAtPath(path_string + contents = try self.fileManager.contentsOfDirectory(atPath: path_string ) } catch let error as NSError { loadError = error @@ -69,15 +73,15 @@ extension Path: SequenceType { return self.children } - public func content(path_string:NSString) -> Path { + public func content(_ path_string:NSString) -> Path { return Path( - NSURL(fileURLWithPath: self.path_string) - .URLByAppendingPathComponent( path_string as String ) + try! URL(fileURLWithPath: self.path_string) + .appendingPathComponent( path_string as String ) .path! ) } - public func child(path:NSString) -> Path { + public func child(_ path:NSString) -> Path { return self.content(path) } @@ -85,7 +89,7 @@ extension Path: SequenceType { var error: NSError? let result: Bool do { - try fileManager.createDirectoryAtPath(path_string, + try fileManager.createDirectory(atPath: path_string, withIntermediateDirectories:true, attributes:nil) result = true @@ -99,15 +103,15 @@ extension Path: SequenceType { } - public func generate() -> AnyGenerator { + public func makeIterator() -> AnyIterator { assert(self.isDir,"To get iterator, path must be dir< \(path_string) >") - let iterator = fileManager.enumeratorAtPath(path_string) - return anyGenerator() { + let iterator = fileManager.enumerator(atPath: path_string) + return AnyIterator() { let optionalContent = iterator?.nextObject() as! String? if let content = optionalContent { return self.content(content) } else { - return .None + return .none } } } diff --git a/SwiftFilePath/PathExtensionFile.swift b/SwiftFilePath/PathExtensionFile.swift index 4442b04..dd7ed96 100644 --- a/SwiftFilePath/PathExtensionFile.swift +++ b/SwiftFilePath/PathExtensionFile.swift @@ -10,7 +10,7 @@ extension Path { public var ext:NSString { - return NSURL(fileURLWithPath:path_string).pathExtension! + return URL(fileURLWithPath:path_string).pathExtension! } public func touch() -> Result { @@ -20,12 +20,12 @@ extension Path { : self.createEmptyFile() } - public func updateModificationDate(date: NSDate = NSDate() ) -> Result{ + public func updateModificationDate(_ date: Date = Date() ) -> Result{ var error: NSError? let result: Bool do { try fileManager.setAttributes( - [NSFileModificationDate :date], + [FileAttributeKey.modificationDate :date], ofItemAtPath:path_string) result = true } catch let error1 as NSError { @@ -49,7 +49,7 @@ extension Path { let read: String? do { read = try String(contentsOfFile: path_string, - encoding: NSUTF8StringEncoding) + encoding: String.Encoding.utf8) } catch let error as NSError { readError = error read = nil @@ -62,14 +62,14 @@ extension Path { return read } - public func writeString(string:String) -> Result { + public func writeString(_ string:String) -> Result { assert(!self.isDir,"Can NOT write data from dir") var error: NSError? let result: Bool do { - try string.writeToFile(path_string, + try string.write(toFile: path_string, atomically:true, - encoding: NSUTF8StringEncoding) + encoding: String.Encoding.utf8) result = true } catch let error1 as NSError { error = error1 @@ -82,17 +82,17 @@ extension Path { // MARK: - read/write NSData - public func readData() -> NSData? { + public func readData() -> Data? { assert(!self.isDir,"Can NOT read data from dir") - return NSData(contentsOfFile: path_string) + return (try? Data(contentsOf: URL(fileURLWithPath: path_string))) } - public func writeData(data:NSData) -> Result { + public func writeData(_ data:Data) -> Result { assert(!self.isDir,"Can NOT write data from dir") var error: NSError? let result: Bool do { - try data.writeToFile(path_string, options:.DataWritingAtomic) + try data.write(to: URL(fileURLWithPath: path_string), options:.atomic) result = true } catch let error1 as NSError { error = error1 diff --git a/SwiftFilePath/Result.swift b/SwiftFilePath/Result.swift index fc0715a..38240dc 100644 --- a/SwiftFilePath/Result.swift +++ b/SwiftFilePath/Result.swift @@ -8,68 +8,68 @@ public enum Result { - case Success(S) - case Failure(F) + case success(S) + case failure(F) public init(success:S){ - self = .Success(success) + self = .success(success) } public init(failure:F){ - self = .Failure(failure) + self = .failure(failure) } public var isSuccess:Bool { switch self { - case .Success: return true - case .Failure: return false + case .success: return true + case .failure: return false } } public var isFailure:Bool { switch self { - case .Success: return false - case .Failure: return true + case .success: return false + case .failure: return true } } public var value:S? { switch self { - case .Success(let success): + case .success(let success): return success - case .Failure(_): - return .None + case .failure(_): + return .none } } public var error:F? { switch self { - case .Success(_): - return .None - case .Failure(let error): + case .success(_): + return .none + case .failure(let error): return error } } - public func onFailure(handler:(F) -> Void ) -> Result { + public func onFailure(_ handler:(F) -> Void ) -> Result { switch self { - case .Success(_): + case .success(_): return self - case .Failure(let error): + case .failure(let error): handler( error ) return self } } - public func onSuccess(handler:(S) -> Void ) -> Result { + public func onSuccess(_ handler:(S) -> Void ) -> Result { switch self { - case .Success(let success): + case .success(let success): handler(success ) return self - case .Failure(_): + case .failure(_): return self } } -} \ No newline at end of file +} diff --git a/SwiftFilePathTests/SwiftFilePathTests.swift b/SwiftFilePathTests/SwiftFilePathTests.swift index e0c426a..1f4aac1 100644 --- a/SwiftFilePathTests/SwiftFilePathTests.swift +++ b/SwiftFilePathTests/SwiftFilePathTests.swift @@ -14,13 +14,13 @@ import SwiftFilePath extension String { func match(pattern: String) -> Bool { - let matcher: NSRegularExpression? + let matcher: RegularExpression? do { - matcher = try NSRegularExpression(pattern: pattern, options: []) + matcher = try RegularExpression(pattern: pattern, options: []) } catch _ as NSError { matcher = nil } - return matcher?.numberOfMatchesInString(self, options: [], range: NSMakeRange(0, self.utf16.count)) != 0 + return matcher?.numberOfMatches(in: self, options: [], range: NSMakeRange(0, self.utf16.count)) != 0 } } @@ -53,22 +53,22 @@ class SwiftFilePathTests: XCTestCase { let homeDir = Path.homeDir XCTAssertTrue( - homeDir.toString().match("/data") + homeDir.toString().match(pattern: "/data") ) let temporaryDir = Path.temporaryDir XCTAssertTrue( - temporaryDir.toString().match("/data/tmp/") + temporaryDir.toString().match(pattern: "/data/tmp/") ) let documentsDir = Path.documentsDir XCTAssertTrue( - documentsDir.toString().match("/data/Documents") + documentsDir.toString().match(pattern: "/data/Documents") ) let cacheDir = Path.cacheDir XCTAssertTrue( - cacheDir.toString().match("/data/Library/Caches") + cacheDir.toString().match(pattern: "/data/Library/Caches") ) } @@ -86,12 +86,12 @@ class SwiftFilePathTests: XCTestCase { func testFile() { let file = sandboxDir.content("hoge.txt") XCTAssertTrue( - file.toString().match("/data/tmp/sandbox/hoge.txt") + file.toString().match(pattern: "/data/tmp/sandbox/hoge.txt") ) XCTAssertEqual( file.ext , "txt") XCTAssertEqual( file.basename, "hoge.txt") XCTAssertTrue( - file.parent.toString().match("/data/tmp/sandbox") + file.parent.toString().match(pattern: "/data/tmp/sandbox") ) } @@ -132,7 +132,7 @@ class SwiftFilePathTests: XCTestCase { let fruitsDir = sandboxDir.content("fruits") XCTAssertTrue( - fruitsDir.toString().match("/data/tmp/sandbox/fruits") + fruitsDir.toString().match(pattern: "/data/tmp/sandbox/fruits") ) XCTAssertFalse( fruitsDir.exists ) @@ -190,26 +190,26 @@ class SwiftFilePathTests: XCTestCase { func testSubDir() { let dir = sandboxDir.content("foo") XCTAssertTrue( - dir.toString().match("/data/tmp/sandbox/foo") + dir.toString().match(pattern: "/data/tmp/sandbox/foo") ) } func testParentDir() { let dir = sandboxDir.content("foo") XCTAssertTrue( - dir.toString().match("/data/tmp/sandbox/foo") + dir.toString().match(pattern: "/data/tmp/sandbox/foo") ) XCTAssertTrue( - dir.parent.toString().match("/data/tmp/sandbox") + dir.parent.toString().match(pattern: "/data/tmp/sandbox") ) XCTAssertTrue( - dir.parent.parent.parent.toString().match("/data") + dir.parent.parent.parent.toString().match(pattern: "/data") ) XCTAssertTrue( - dir.parent.parent.parent.parent.toString().match("/") + dir.parent.parent.parent.parent.toString().match(pattern: "/") ) XCTAssertTrue( - dir.parent.parent.parent.parent.parent.parent.toString().match("/") + dir.parent.parent.parent.parent.parent.parent.toString().match(pattern: "/") ) } @@ -253,8 +253,8 @@ class SwiftFilePathTests: XCTestCase { for content in sandboxDir { XCTAssertTrue(content.exists) - contentCount++ - if( content.isDir ){ dirCount++ } + contentCount += 1 + if( content.isDir ){ dirCount += 1 } } XCTAssertEqual( contentCount, 3) XCTAssertEqual( dirCount, 1) @@ -296,23 +296,23 @@ class SwiftFilePathTests: XCTestCase { locally { let string = "HelloData" - let data = string.dataUsingEncoding(NSUTF8StringEncoding) + let data = string.data(using: String.Encoding.utf8) let result = binFile.writeData( data! ) XCTAssertTrue( result.isSuccess ) let readData = binFile.readData() - let readString = NSString(data: readData!, encoding: NSUTF8StringEncoding)! + let readString = NSString(data: readData!, encoding: String.Encoding.utf8.rawValue)! XCTAssertEqual( readString, "HelloData") } locally { let string = "HelloData Again" - let data = string.dataUsingEncoding(NSUTF8StringEncoding) + let data = string.data(using: String.Encoding.utf8) let result = binFile.writeData( data! ) XCTAssertTrue( result.isSuccess ) let readData = binFile.readData() - let readString = NSString(data: readData!, encoding: NSUTF8StringEncoding)! + let readString = NSString(data: readData!, encoding: String.Encoding.utf8.rawValue)! XCTAssertEqual( readString, "HelloData Again") } @@ -427,10 +427,10 @@ class SwiftFilePathTests: XCTestCase { let result = Result(success:200); switch result { - case .Success(let value): + case .success(let value): callOnSuccess = true print(value) - case .Failure(let error): + case .failure(let error): callOnFailure = true print(error) } @@ -444,10 +444,10 @@ class SwiftFilePathTests: XCTestCase { let result = Result(failure: "ERROR!!!"); switch result { - case .Success(let value): + case .success(let value): callOnSuccess = true print(value) - case .Failure(let error): + case .failure(let error): callOnFailure = true print(error) } @@ -456,4 +456,4 @@ class SwiftFilePathTests: XCTestCase { } } -} \ No newline at end of file +}