введите описание изображения здесь Итак, в основном, я хочу поместить слово (слова), введенные в 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)")





Простой ответ: У вас может быть что-то вроде
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 для длинного ответа, вы можете поместить все материалы в первый блок в свой собственный файл .swift. Затем поместите normalText.uniqueCharacters() туда, где вы хотите массив
Если я ответил на ваш вопрос, можете ли вы нажать на зеленый мат, чтобы отметить его как ответ?
Ваше изображение нигде не отображает массив. Вы должны прочитать массив с помощью ForEach, это массив. Как вы пытаетесь это реализовать?
Нет, это не работает. Это не сработает, если я положу его в новый файл .swift, а также если я положу его в файл, показанный на изображении. Извините, я забыл упомянуть, что я использую SwiftUI
@HarrisonT Я добавил еще немного кода. Это может прояснить для вас. Код массива написан на языке swift, который является языком SwiftUI.
Да, это работает. Спасибо за помощь. Другой вопрос: как мне делать что-то с массивом, например, менять порядок слов или менять каждую букву на отдельный символ?
@HarrisonT Как и с любым другим массивом. Он ведет себя так же. Существуют уже встроенные функции, такие как reversed(). Можете ли вы отметить ответ зеленой галочкой?
Я только что добавил изображение, вы можете сказать мне, где я могу разместить все?