Comments (3)
relative path from what?
from current path?
there is no cocoa functions I think so we must implement it
I could provide a non tested code
- maybe we must standardize the path before
- then some code maybe are not swift3 . compliant
- return a Path will be more elegant
extension Path {
func stringWithPathRelative(to anchorPath: Path) -> String {
let pathComponents = self. components
let anchorComponents = anchorPath. components
var componentsInCommon = 0
for (c1, c2) in zip(pathComponents, anchorComponents) {
if c1 != c2 {
break
}
componentsInCommon += 1
}
let numberOfParentComponents = anchorComponents.count - componentsInCommon
let numberOfPathComponents = pathComponents.count - componentsInCommon
var relativeComponents = [String]()
relativeComponents.reserveCapacity(numberOfParentComponents + numberOfPathComponents)
for _ in 0..<numberOfParentComponents {
relativeComponents.append("..")
}
relativeComponents.appendContentsOf(pathComponents[componentsInCommon..<pathComponents.count])
return String.pathWithComponents(relativeComponents)
}
}
from filekit.
I have something like this in my extension
func relativeTo(path: Path) -> Path? {
let root = path.components
let this = self.components
guard this.starts(with: root) else {
return nil
}
let rel = this.suffix(from: root.endIndex)
let path = rel.map({ $0.rawValue }).joined(separator: "/")
return Path(path)
}
And I use it like that
let filePath = file.relativeTo(path: Path.userDocuments)
This function does not handle some edge cases, but it suits my needs.
from filekit.
I have made separate repo, SwiftyRelativePath, for just this purpose with tests for edge cases.
let url0 = URL(fileURLWithPath: "/computer/qubit/17")
let url1 = URL(fileURLWithPath: "/computer/lab")
url0.relativePath(from: url1) // -> "../qubit/17"
Feel free to import it into FileKit.
from filekit.
Related Issues (20)
- Feature Request: For adding/removing extended file attributes HOT 1
- Debugger support? HOT 1
- Codable doesn't conform to ReadableWritable HOT 1
- Path + String produces bad AnySequence result if Path ends with / and String starts with /
- Is there a way to write files to icloud using file kit? HOT 2
- Swift 4.1 Compatibility HOT 1
- 'pngData()' has been renamed to 'UIImagePNGRepresentation(_:)' HOT 1
- No way to get file base name (filename without extension)? HOT 4
- Need way to append a path extension without removing anything after a period HOT 1
- Pod version is older than latest release version. HOT 1
- Is there any way to encrypt a file ? HOT 1
- Please update cocoapods version to 6.0.0 HOT 5
- Deprecated method FileHandle.write(Data)
- Typo in ReadMe?
- CocoaPods extremely out-of-date (5.2 when it should be 6.0)
- Is there anyway to delete or clear contents of the file? HOT 1
- how to use it in SwiftUI
- Getting path of file used in other app
- Namespace issue with SwiftUI
- Add privacy manifest HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from filekit.