Skip to content
This repository has been archived by the owner on Aug 2, 2024. It is now read-only.

Commit

Permalink
Merge pull request #3 from WeltN24/feature/swift3.0
Browse files Browse the repository at this point in the history
swift 3.0 migration
  • Loading branch information
asalom authored Dec 15, 2016
2 parents cc7e203 + 847463b commit a81289a
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 128 deletions.
23 changes: 16 additions & 7 deletions SwiftFilePath.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -172,16 +172,16 @@
attributes = {
LastSwiftMigration = 0700;
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0700;
LastUpgradeCheck = 0810;
ORGANIZATIONNAME = "Norihiro Sakamoto";
TargetAttributes = {
CC7832EB1A610124005E77C3 = {
CreatedOnToolsVersion = 6.1;
LastSwiftMigration = 0800;
LastSwiftMigration = 0810;
};
CC7832F61A610125005E77C3 = {
CreatedOnToolsVersion = 6.1;
LastSwiftMigration = 0800;
LastSwiftMigration = 0810;
};
};
};
Expand Down Expand Up @@ -264,8 +264,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
Expand All @@ -275,6 +277,7 @@
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
Expand Down Expand Up @@ -311,8 +314,10 @@
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
Expand All @@ -321,6 +326,7 @@
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
Expand All @@ -330,6 +336,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
VERSIONING_SYSTEM = "apple-generic";
Expand All @@ -341,6 +348,7 @@
isa = XCBuildConfiguration;
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
Expand All @@ -351,14 +359,15 @@
PRODUCT_BUNDLE_IDENTIFIER = "me.nori0620.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 2.3;
SWIFT_VERSION = 3.0;
};
name = Debug;
};
CC7833041A610125005E77C3 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
Expand All @@ -369,7 +378,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "me.nori0620.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 2.3;
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand All @@ -388,7 +397,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 = 2.3;
SWIFT_VERSION = 3.0;
};
name = Debug;
};
Expand All @@ -403,7 +412,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 = 2.3;
SWIFT_VERSION = 3.0;
};
name = Release;
};
Expand Down
64 changes: 32 additions & 32 deletions SwiftFilePath/Path.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@
// Copyright (c) 2015年 Norihiro Sakamoto. All rights reserved.
//

public class Path {
open class Path {

// MARK: - Class methods

public class func isDir(path:NSString) -> Bool {
open class func isDir(_ path:String) -> Bool {
var isDirectory: ObjCBool = false
_ = NSFileManager.defaultManager().fileExistsAtPath(path as String, isDirectory:&isDirectory)
_ = FileManager.default.fileExists(atPath: path, isDirectory:&isDirectory)

return isDirectory ? true : false
return isDirectory.boolValue ? true : false
}

// MARK: - Instance properties and initializer

lazy var fileManager = NSFileManager.defaultManager()
public let path_string:String
lazy var fileManager = FileManager.default
open let path_string:String


public init(_ p: String) {
Expand All @@ -29,42 +29,42 @@ public class Path {

// MARK: - Instance val

public var attributes:NSDictionary?{
open var attributes:NSDictionary?{
get { return self.loadAttributes() }
}

public var asString: String {
open var asString: String {
return path_string
}

public var exists: Bool {
return fileManager.fileExistsAtPath(path_string)
open var exists: Bool {
return fileManager.fileExists(atPath: path_string)
}

public var isDir: Bool {
return Path.isDir(path_string);
open var isDir: Bool {
return Path.isDir(path_string)
}

public var basename:NSString {
open var basename:String {
return (path_string as NSString).lastPathComponent
}

public var parent: Path{
return Path((path_string as NSString).stringByDeletingLastPathComponent )
open var parent: Path{
return Path((path_string as NSString).deletingLastPathComponent )
}

// MARK: - Instance methods

public func toString() -> String {
open func toString() -> String {
return path_string
}

public func remove() -> Result<Path,NSError> {
open func remove() -> Result<Path,NSError> {
assert(self.exists,"To remove file, file MUST be exists")
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
Expand All @@ -75,15 +75,15 @@ public class Path {
: Result(failure: error!);
}

public func copyTo(toPath:Path) -> Result<Path,NSError> {
open func copyTo(_ toPath:Path) -> Result<Path,Error> {
assert(self.exists,"To copy file, file MUST be exists")
var error: NSError?
var error: Error?
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 {
} catch let error1 {
error = error1
result = false
}
Expand All @@ -92,15 +92,15 @@ public class Path {
: Result(failure: error!)
}

public func moveTo(toPath:Path) -> Result<Path,NSError> {
open func moveTo(_ toPath:Path) -> Result<Path,Error> {
assert(self.exists,"To move file, file MUST be exists")
var error: NSError?
var error: Error?
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 {
} catch let error1 {
error = error1
result = false
}
Expand All @@ -111,11 +111,11 @@ public class Path {

private func loadAttributes() -> NSDictionary? {
assert(self.exists,"File must be exists to load file.< \(path_string) >")
var loadError: NSError?
let result: [NSObject: AnyObject]?
var loadError: Error?
let result: [AnyHashable: Any]?
do {
result = try self.fileManager.attributesOfItemAtPath(path_string)
} catch let error as NSError {
result = try self.fileManager.attributesOfItem(atPath: path_string)
} catch let error {
loadError = error
result = nil
}
Expand All @@ -124,7 +124,7 @@ public class Path {
print("Error< \(error.localizedDescription) >")
}

return result
return result as NSDictionary?
}

}
Expand All @@ -133,7 +133,7 @@ public class Path {

extension Path: CustomStringConvertible {
public var description: String {
return "\(NSStringFromClass(self.dynamicType))<path:\(path_string)>"
return "\(NSStringFromClass(type(of: self)))<path:\(path_string)>"
}
}

Expand Down
46 changes: 23 additions & 23 deletions SwiftFilePath/PathExtensionDir.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,66 +21,66 @@ 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]
private class func userDomainOf(_ pathEnum:FileManager.SearchPathDirectory)->Path{
let pathString = NSSearchPathForDirectoriesInDomains(pathEnum, .userDomainMask, true)[0]
return Path( pathString )
}

}
#endif

// Add Dir Behavior to Path by extension
extension Path: SequenceType {
extension Path: Sequence {

public subscript(filename: String) -> Path{
public subscript(filename: String) -> Path {
get { return self.content(filename) }
}

public var children:Array<Path>? {
assert(self.isDir,"To get children, path must be dir< \(path_string) >")
assert(self.exists,"Dir must be exists to get children.< \(path_string) >")

var contents: [AnyObject]? = nil
var contents: [String]? = nil
do {
contents = try self.fileManager.contentsOfDirectoryAtPath(path_string)
} catch let error as NSError {
contents = try self.fileManager.contentsOfDirectory(atPath: path_string)
} catch let error {
print("Error< \(error.localizedDescription) >")
}

return contents?.map({ [unowned self] content in
return self.content(content as! String)
})
return contents?.map { [unowned self] content in
return self.content(content)
}

}

public var contents:Array<Path>? {
return self.children
}

public func content(path_string:NSString) -> Path {
return Path( (self.path_string as NSString).stringByAppendingPathComponent(path_string as String) )
public func content(_ path_string:String) -> Path {
return Path( (self.path_string as NSString).appendingPathComponent(path_string) )
}

public func child(path:NSString) -> Path {
public func child(_ path:String) -> Path {
return self.content(path)
}

public func mkdir() -> Result<Path,NSError> {
var error: NSError?
public func mkdir() -> Result<Path,Error> {
var error: Error?
let result: Bool
do {
try fileManager.createDirectoryAtPath(path_string,
try fileManager.createDirectory(atPath: path_string,
withIntermediateDirectories:true,
attributes:nil)
result = true
} catch let error1 as NSError {
} catch let error1 {
error = error1
result = false
}
Expand All @@ -90,15 +90,15 @@ extension Path: SequenceType {

}

public func generate() -> AnyGenerator<Path> {
public func makeIterator() -> AnyIterator<Path> {
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
}
}
}
Expand Down
Loading

0 comments on commit a81289a

Please sign in to comment.