шифр, не уверен, как реализовать алфавитно-цифровой шифр с заданными протоколами на месте - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь заставить текстовое поле принимать только буквенно-цифровой ввод, но как мне сделать это в функции уже без необходимости создания другой функции или протокола для этого?Я только 4 недели в изучении Swift, я не уверен, как использовать CharacterSet или Range, но мне нужно только взять AZ и 0-9, НО с этим вводом, я должен быть в состоянии перемещаться по нему в таком порядке, поэтомуесли я сдвину его на 2, и я нахожусь на z, это даст мне 1, или, если я нахожусь на a, и я смещусь на -1, то оно перейдет к 9. Я должен использовать протокол, который у меня уже есть, который имеет2 функции, шифруют и дешифруют и принимают 2 параметра, строку для ввода и другую строку для int, чтобы сдвинуть его, но для этого тоже требуется строка, я конвертирую ее в int для использования.Я просто заблудился о том, как ограничить ввод в функции и переходить по индексам с указанным int.

protocol CipherProtocol {
func encrypt (plaintext: String, secret: String) -> String
func decrypt (output: String, secret: String) -> String
}



struct AlphanumericCesarCipher: CipherProtocol {
func encrypt(plaintext: String, secret: String) -> 
String {
    guard let secret = UInt32(secret) else {
        return "error"
    }



    var encoded = ""

    for character in plaintext {
         if let alpha = ["A","B","C","D","E","F","G","H","I","J","K","L","M",
                     "N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
                     "0","1","2","3","4","5","6","7","8","9"]  {

        }

        guard let firstUnicodeScalar = character.alpha.first else {
                return "error"
            }
            let unicode = firstUnicodeScalar.value
            let shiftedUnicode = unicode + secret
            let shiftedCharacter = String(UnicodeScalar(UInt8(shiftedUnicode))) //what does this line mean

            encoded += shiftedCharacter
        }
        return encoded
    }


func decrypt(output: String, secret: String) -> String {
    return ""
}


}

1 Ответ

0 голосов
/ 27 февраля 2019

Я думаю, что вам нужно использовать «Регулярные выражения».В этом случае ваш текстовый ввод будет принимать только алфавитно-цифровой или любой набор символов, который вы укажете.

Попробуйте этот код в вашем контроллере представления, чтобы разрешить ввод только аз, AZ, 0-9 символов.Затем вы можете использовать свою логику для смены или других задач, которые вам нужны.

override func viewDidLoad() {
    super.viewDidLoad()
    txt_input.delegate = self
}


func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    do {
        let text = (textField.text! as NSString).replacingCharacters(in: range, with: string)
        let regex = try NSRegularExpression(pattern: "^([a-zA-Z0-9])$", options: [])
        if regex.firstMatch(in: text, options: [], range: NSMakeRange(0, text.count)) != nil {
            return true
        }
    }
    catch {
        print("ERROR")
    }
    return false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...