Swiftpack.co - SwiftScream/URITemplate as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by SwiftScream.
SwiftScream/URITemplate 2.1.0
Robust and performant Swift implementation of RFC6570 URI Template
⭐️ 10
🕓 1 year ago
.package(url: "https://github.com/SwiftScream/URITemplate.git", from: "2.1.0")

URITemplate license GitHub release

Travis Codecov branch

Swift 4.2 CocoaPods compatible Carthage compatible Swift Package Manager compatible

A robust and performant Swift 4.2 implementation of RFC6570 URI Template. Full Level 4 support is provided.

Getting Started


Static Framework targets are provided for iOS, MacOS, tvOS, and watchOS; integrate them as you normally would.


Add pod 'ScreamURITemplate', '~> 2.1' to your Podfile


Add github "SwiftScream/URITemplate" ~> 2.1 to your Cartfile

For simulator builds you will need to add -fprofile-instr-generate to OTHER_LDFLAGS; device builds will be fine without it This is due to this open issue with carthage: https://github.com/Carthage/Carthage/issues/2363 The alternative would be to disable code coverage :disappointed:

Swift Package Manager

Add .package(url: "https://github.com/SwiftScream/URITemplate.git", from: "2.0.0") to your package.swift dependencies


Template Processing

let template = try URITemplate(string:"https://api.github.com/repos/{owner}/{repository}/traffic/views")
let variables = ["owner":"SwiftScream", "repository":"URITemplate"]
let urlString = try template.process(variables)
// https://api.github.com/repos/SwiftScream/URITemplate/traffic/views

When Things Go Wrong

Both template initialization and processing can fail; throwing a URITemplate.Error The error cases contain associated values specifying a string reason for the error and the index into the template string that the error occurred.

do {
    _ = try URITemplate(string: "https://api.github.com/repos/{}/{repository}")
} catch URITemplate.Error.malformedTemplate(let position, let reason) {
    // reason = "Empty Variable Name"
    // position = 29th character

Get variable names used in a template

let template = try URITemplate(string:"https://api.github.com/repos/{owner}/{repository}/traffic/views")
let variableNames = template.variableNames
// ["owner", "repository"]

Codable Support

URITemplate implements the Codable protocol, enabling easy serialization to or from JSON objects.

struct HALObject : Codable {
    let _links : [String:URITemplate]


The library is tested against the standard test suite, as well as some additional tests for behavior specific to this implementation. It is intended to keep test coverage as high as possible.


Stars: 10
Last commit: 1 year ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Related Packages

Release Notes

3 years ago
  • Update Swift version to 4.2 (thanks @jonnybach)

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics