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?