Relative paths are often assembled from named pieces before they are resolved.

Join relative pieces

section
relative_segments.swift
Replay: real traced execution (multi-file project)
let section = "src"
let pieces = [section, "swift", "main.swift"]
let relativePath = pieces.joined(separator: "/")
let message = "path=\(relativePath)"

print(message)
let section = "tests"
let pieces = [section, "swift", "main.swift"]
let relativePath = pieces.joined(separator: "/")
let message = "path=\(relativePath)"

print(message)
let section = "tools"
let pieces = [section, "swift", "main.swift"]
let relativePath = pieces.joined(separator: "/")
let message = "path=\(relativePath)"

print(message)
  1. section ← src, pieces ← ["src", "swift", "main.swift"], relativePath ← src/swift/main.swift

    1let section→ src = "src"  //@section="tests", "tools"2let pieces→ ["src", "swift", "main.swift"] = [sectionsrc, "swift", "main.swift"]3let relativePath→ src/swift/main.swift = pieces["src", "swift", "main.swift"].joined(separator: "/")4let message→ path=src/swift/main.swift = "path=\(relativePathsrc/swift/main.swift)"56print(messagepath=src/swift/main.swift)
    outputpath=src/swift/main.swift
  1. section ← tests, pieces ← ["tests", "swift", "main.swift"], relativePath ← tests/swift/main.swift

    1let section→ tests = "tests"2let pieces→ ["tests", "swift", "main.swift"] = [sectiontests, "swift", "main.swift"]3let relativePath→ tests/swift/main.swift = pieces["tests", "swift", "main.swift"].joined(separator: "/")4let message→ path=tests/swift/main.swift = "path=\(relativePathtests/swift/main.swift)"56print(messagepath=tests/swift/main.swift)
    outputpath=tests/swift/main.swift
  1. section ← tools, pieces ← ["tools", "swift", "main.swift"], relativePath ← tools/swift/main.swift

    1let section→ tools = "tools"2let pieces→ ["tools", "swift", "main.swift"] = [sectiontools, "swift", "main.swift"]3let relativePath→ tools/swift/main.swift = pieces["tools", "swift", "main.swift"].joined(separator: "/")4let message→ path=tools/swift/main.swift = "path=\(relativePathtools/swift/main.swift)"56print(messagepath=tools/swift/main.swift)
    outputpath=tools/swift/main.swift
relative path An array of path segments can be joined into a relative path for display or configuration.