Как разбить TextField на символы?

введите описание изображения здесь Итак, в основном, я хочу поместить слово (слова), введенные в TextField, в массив, но также разделить слово (слова) на отдельные символы, чтобы каждый символ слова (слов) занимал свое место в массиве.

Например, если кто-то ввел «обезьяна» в TextField, он будет помещен в такой массив

inputtedWord = ["m","o","n","k","e","y"]

This is what I have for the TextField:
@State private var normalText: String = ""

TextField("Input the word you want to be cipher.",
   text: $normalText)
   .padding(.all)
       Text("\(normalText)")
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Простой ответ: У вас может быть что-то вроде

let inputtedWord: [Character] = Array(normalText)

Это дает вам массив символов, как вы описываете

Длинный ответ: Вероятно, вы захотите иметь возможность различать повторяющиеся/повторяющиеся символы.

Для этого вам понадобится struct и сделайте его Identifiable, чтобы вы могли различать повторяющиеся символы.

//String/Characters can be repeating so yu have to make them a unique value
struct UniqueCharacter: Identifiable, Equatable{
    var char: Character
    var id: UUID = UUID()
}

//Convert String to Unique characers
extension String{
    ///Converts the `String` to `[UniqueCharacter]`
    func uniqueCharacters() -> [UniqueCharacter]{
        //Converts the `String` to `[Character]`
        let array: [Character] = Array(self)
        //Converts `[Character]` to `[UniqueCharacter]`
        return array.uniqueCharacters()
    }

}
extension Array where Element == Character {
    ///Converts `[Character]` to `[UniqueCharacter]`
    func uniqueCharacters() -> [UniqueCharacter]{
        var array: [UniqueCharacter] = []
        
        for char in self{
            array.append(UniqueCharacter(char: char))
        }
        return array
    }
    
}

Вот полный пример использования

struct TextFieldView: View {
    @State private var normalText: String = "monkey"
    var array: [UniqueCharacter]{
        normalText.uniqueCharacters()
    }
    var body: some View {
        TextField("Input the word you want to be cipher.",
           text: $normalText)
        Text(array.map{$0.char}.description)
        HStack{
            ForEach(array){ uniqueChar in
                Text(uniqueChar.char.description)
            }
        }
        Text(Array(normalText).description)
    }
}

Это то, что выше View производит.

Я только что добавил изображение, вы можете сказать мне, где я могу разместить все?

HarrisonT 13.05.2022 02:07

@HarrisonT для длинного ответа, вы можете поместить все материалы в первый блок в свой собственный файл .swift. Затем поместите normalText.uniqueCharacters() туда, где вы хотите массив

lorem ipsum 13.05.2022 02:12

Если я ответил на ваш вопрос, можете ли вы нажать на зеленый мат, чтобы отметить его как ответ?

lorem ipsum 13.05.2022 02:12

Ваше изображение нигде не отображает массив. Вы должны прочитать массив с помощью ForEach, это массив. Как вы пытаетесь это реализовать?

lorem ipsum 13.05.2022 03:12

Нет, это не работает. Это не сработает, если я положу его в новый файл .swift, а также если я положу его в файл, показанный на изображении. Извините, я забыл упомянуть, что я использую SwiftUI

HarrisonT 13.05.2022 03:12

@HarrisonT Я добавил еще немного кода. Это может прояснить для вас. Код массива написан на языке swift, который является языком SwiftUI.

lorem ipsum 13.05.2022 04:13

Да, это работает. Спасибо за помощь. Другой вопрос: как мне делать что-то с массивом, например, менять порядок слов или менять каждую букву на отдельный символ?

HarrisonT 16.05.2022 02:56

@HarrisonT Как и с любым другим массивом. Он ведет себя так же. Существуют уже встроенные функции, такие как reversed(). Можете ли вы отметить ответ зеленой галочкой?

lorem ipsum 16.05.2022 03:42

Другие вопросы по теме