Because Version.init?(_ characters:) is really failable this code is very dangerous: extension Version: StringLiteralConvertible { public init(stringLiteral value: String) { self.init(value.characters)! } Is the convenience worth it?