ASCIIString
and ASCIICharacter
types for Swift offering validation and lossy conversion from String
.
Complete unit test coverage.
-
SwiftASCII is available as a Swift Package that can be added as a dependency in your app or package.
-
In an Xcode app project or framework add the package dependency to your target using this URL:
https://github.com/orchetect/SwiftASCII
-
In a Swift Package, add it to the Package.swift dependencies:
.package(url: "https://github.com/orchetect/SwiftASCII", from: "1.1.5")
-
-
Import the library:
import SwiftASCII
// failable init
ASCIIString(exactly: "An ASCII String.") // succeeds
ASCIIString(exactly: "Ãñ ÂŚÇÏÎ Strïńg.") // nil
// lossy string conversion making ASCII-compatible substitutions
ASCIIString("An ASCII String.") // "An ASCII String." (unchanged)
ASCIIString("Ãñ ÂŚÇÏÎ Strïńg.") // "An ASCII String." (substituted)
// lossy string conversion through String literal type inference
let str: ASCIIString = "Ãñ ÂŚÇÏÎ Strïńg."
print(str) // "An ASCII String." (substituted)
let asciiString = ASCIIString("ÂŚÇÏÎ")
// returns typed as String
asciiString.stringValue // "ASCII"
// returns Data representation of string
asciiString.rawData // Data([0x41, 0x53, 0x43, 0x49, 0x49])
// failable init
ASCIICharacter(exactly: "A") // succeeds
ASCIICharacter(exactly: "Ω") // nil
// lossy string conversion making ASCII-compatible substitutions
ASCIICharacter("A") // "A" (unchanged)
ASCIICharacter("Ã") // "A" (substituted)
// lossy character conversion through Character literal type inference
let char: ASCIICharacter = "Ä"
print(char) // "A" (substituted)
// failable ASCII integer literal init
ASCIICharacter(65) // "A"
ASCIICharacter(300) // nil
let asciiString = ASCIICharacter("Ä")
// returns typed as Character
asciiString.characterValue // Character("A")
// returns ASCII integer literal
asciiString.asciiValue // 65
// returns Data representation of character
asciiString.rawData // Data([0x41])
Coded by a bunch of 🐹 hamsters in a trenchcoat that calls itself @orchetect.
Licensed under the MIT license. See LICENSE for details.
Contributions are welcome. Feel free to post an Issue to discuss.