‍ Seu primeiro script Swift incrível, parte 2

Jan 12 2023
Automatize suas tarefas chatas de localização com um prático script Swift Na parte 1, construímos nosso kit que usaremos agora para servir ao nosso propósito. Em seguida crie o LocaleManager que nos servirá para adicionar, modificar e deletar nos arquivos localizáveis.

Automatize suas tarefas chatas de localização com um prático script Swift

Na parte 1 , construímos nosso kit que usaremos agora para atender ao nosso propósito.

Em seguida crie o LocaleManager que nos servirá para adicionar, modificar e deletar nos arquivos localizáveis.

Removendo chaves..

Veja como vamos remover as chaves dos arquivos localizáveis.

enum LocaleManager {
    static func tryRemovingKey() {
        /// 1
        print("What key do you want to remove?".inYellow)
        
        /// 2
        guard
            let key = readLine(), !key.isEmpty else {
            print("Invalid Key".inRed)
                return
            }

        /// 3
        for relativeFilePath in Utils.localizableFiles {
            var fileContent = Utils.contentOf(file: relativeFilePath)

            /// 4
            guard fileContent.contains(key: key) else {
                print("Key \(key) not found at \(relativeFilePath)".inRed)
                continue
            }
  
            /// 5
            fileContent.removeAll(where: { $0.contains(key.quoted) })

            let updatedFileContent = fileContent.joined(separator: "\n")

            /// 6
            let successfulWrite = Utils.write(content: updatedFileContent, to: relativeFilePath)
            if successfulWrite {
                print("Successfully deleted Key \(key) at \(relativeFilePath)".inGreen)
            }
        }
    }
}

  1. Perguntamos ao usuário qual chave ele está tentando remover.
  2. Recebemos sua entrada e garantimos que seja válida.
  3. Percorremos todos os arquivos localizáveis ​​no diretório, lemos o conteúdo de cada arquivo.
  4. Certifique-se de que cada arquivo contém essa chave, caso contrário, continuamos no próximo arquivo.
  5. Em seguida, removemos essa chave - junto com o valor, é claro, toda a linha - do arquivo.
  6. Por fim, substituímos o arquivo pelo conteúdo atualizado.

Veja como vamos adicionar chaves dos arquivos localizáveis.

extension LocaleManager {
    static func tryAddingKey() {
        /// 1
        print("What key do you want to add?".inYellow)
        guard
            let key = readLine(), !key.isEmpty else {
            print("Invalid Key".inRed)
            return
        }
        var filesWithValues: [String: String] = [:]
        
        /// 2
        for relativeFilePath in Utils.localizableFiles {
            print("Enter value for \(relativeFilePath)".inYellow)
            
            /// 3
            guard
                let value = readLine(), !value.isEmpty else {
                print("Invalid Value".inRed)
                return
            }
            filesWithValues[relativeFilePath] = value
        }
        
        for (relativeFilePath, value) in filesWithValues {
            /// 4
            var fileContent = Utils.contentOf(file: relativeFilePath)
            guard !fileContent.contains(key: key) else {
                print("Key \(key) already has value at \(relativeFilePath)".inRed)
                continue
            }

            /// 5
            let newKeyValue = "\(key.quoted) = \(value.quoted);"
            fileContent.append(newKeyValue)
            
            let updatedFileContent = fileContent.joined(separator: "\n")
            let successfulWrite = Utils.write(content: updatedFileContent, to: relativeFilePath)
            if successfulWrite {
                print("Successfully added Key \(key) at \(relativeFilePath)".inGreen)
            }
        }
    }
}

  1. Perguntamos ao usuário qual chave ele deseja adicionar, recebemos sua entrada e verificamos se é uma entrada válida.
  2. Percorremos todos os arquivos localizáveis ​​no diretório.
  3. Solicita ao usuário o valor daquela chave para aquele arquivo, valida a entrada e a mantém vinculada ao arquivo correspondente.
  4. Certifique-se de que os arquivos já não contenham essa chave para evitar duplicações.
  5. Anexe o novo par chave-valor a cada arquivo e substitua o conteúdo do arquivo.

Da mesma forma, podemos modificar as chaves existentes.

extension LocaleManager {
    static func tryModifyingKey() {
        print("What key do you want to Modify it's value?".inYellow)
        guard
            let key = readLine(), !key.isEmpty else {
            print("Invalid Key".inRed)
                return
            }
        var filesWithValues: [String: String] = [:]

        for relativeFilePath in Utils.localizableFiles {
            print("Enter value for \(relativeFilePath)".inYellow)

            guard
                let value = readLine(), !value.isEmpty else {
                print("Invalid Value".inRed)
                continue
            }
            filesWithValues[relativeFilePath] = value
        }

        for (relativeFilePath, value) in filesWithValues {
            var fileContent = Utils.contentOf(file: relativeFilePath)
            guard fileContent.contains(key: key) else {
                print("Key \(key) doesn't have value at \(relativeFilePath)".inRed)
                continue
            }

            let index = fileContent.firstIndex(where: { $0.contains(key.quoted) })

            let newKeyValue = "\(key.quoted) = \(value.quoted);"
            if let index {
                fileContent[index] = newKeyValue
            } else {
                fileContent.append(newKeyValue)
            }

            let updatedFileContent = fileContent.joined(separator: "\n")
            let successfulWrite = Utils.write(content: updatedFileContent, to: relativeFilePath)
            if successfulWrite {
                print("Successfully Modified value for Key \(key) at \(relativeFilePath)".inGreen)
            }
        }
    }
}

Ufa, isso foi bastante. Fique tranquilo, estamos quase terminando.

Na parte 3, juntaremos todas as ideias e veremos esse script em ação.