I’m developing an app to save words that users learn in a language they are studying.
Here’s the basic workflow:
- Type a new word
- Add the new word
- Every time a word is added, it gets saved to a list that includes its meaning and the name of the language — useful when saving words in multiple languages
Problem: For some reason, the “Add new word” button only works for the first word. The second word is not being added to the list.
Here is my code:
import SwiftUI import NaturalLanguage import Translation
struct ContentView: View { @State private var inputWord: String = "" @State private var detectedLanguage: String? @State private var translationConfiguration: TranslationSession.Configuration? @StateObject private var viewModel = WordViewModel()
var body: some View { VStack(spacing: 24) { // Input field TextField("Type a word in any language", text: $inputWord) .padding() .background(Color(.systemGray6)) .cornerRadius(10) // Button to translate and save Button("Add new word") { translateAndSave() }
// .disabled(inputWord.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty) .buttonStyle(.borderedProminent)
// List of saved words Text("My Words") .font(.system(.title2)) List { ForEach(viewModel.words) { word in VStack(alignment: .leading, spacing: 4) { Text(word.inputWord) .font(.headline) Text(word.nativeTranslation) .font(.subheadline) .foregroundColor(.gray) Text(word.detectedLanguage.uppercased()) .font(.caption) .foregroundColor(.blue) } .padding(.vertical, 4) } } Spacer() } .padding() .animation(.easeInOut, value: detectedLanguage) // Automatically triggers translation when configuration changes .translationTask(translationConfiguration) { session in do { let response = try await session.translate(inputWord) viewModel.addWord( input: inputWord, native: response.targetText, detected: detectedLanguage ?? "Unknown" ) // Reset fields after saving inputWord = "" detectedLanguage = nil translationConfiguration = nil } catch { // Handle error print("Translation error: \(error.localizedDescription)") } } } // Function to detect language private func detectLanguage() { let recognizer = NLLanguageRecognizer() recognizer.processString(inputWord) if let code = recognizer.dominantLanguage?.rawValue { let name = Locale.current.localizedString(forIdentifier: code) detectedLanguage = name?.capitalized } else { detectedLanguage = "Unable to detect" } } // Function to prepare translation private func translateAndSave() { detectLanguage() translationConfiguration = TranslationSession.Configuration( source: nil, target: Locale.Language(identifier: "en") ) }
}
Question:
- Does anyone have any idea what I can do to fix this?