Files
2021-07-01 23:06:51 +03:00

49 lines
1.6 KiB
Swift

//
// UserFieldFormatter.swift
// PrivadoVPN
//
// Created by Juraldinio on 7/1/21.
// Copyright © 2021 Privado LLC. All rights reserved.
//
import Foundation
final class UserFieldFormatter: Formatter {
private lazy var disallowedCharacters: CharacterSet = {
var allowed = CharacterSet()
allowed.formUnion(.decimalDigits)
allowed.insert(charactersIn: "@_-.")
allowed.insert(charactersIn: "QWERTYUIOPASDFGHJKLZXCVBNM")
allowed.insert(charactersIn: "qwertyuiopasdfghjklzxcvbnm")
return allowed.inverted
}()
private var current = ""
override func isPartialStringValid(_ partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>?, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
let length = partialString.count
guard length > 0 else { return true }
let result = partialString.trimmingCharacters(in: self.disallowedCharacters)
if length == result.count { self.current = partialString }
return length == result.count
}
override func string(for obj: Any?) -> String? {
if obj.isExist
, let string = obj as? String {
return string
}
return self.current
}
override func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, for string: String, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
obj?.pointee = string as AnyObject
return true
}
}