#arrays #swift #xcode
#массивы #swift #xcode
Вопрос:
У меня есть массив типа класса «Word», и я пытаюсь извлечь нужное «Слово» из массива на основе того, что я пытаюсь достичь этого с помощью Words.words.firstIndex(where: {$0.id == wordId})
. Но я получаю эту ошибку: Cannot convert value of type 'Array<Word>.Index?' (aka 'Optional<Int>') to expected argument type 'Word'
Спасибо!
Код:
var randomIds:[Int] = []
for _ in 1 ... 4 {
//to make sure there aren't duplicates
var wordId:Int = Int.random(in: 0..<Words.words.count)
while randomIds.contains(wordId){
wordId = Int.random(in: 0..<Words.words.count)
}
randomIds.append(wordId)
answers.append(Answer(id: wordId, isChosen: false, isAnswer: false, word: Words.words.firstIndex(where: {$0.id == wordId})))
}
Класс «Words»:
class Words{
static var words:[Word] = [Word(id: 0, EnglishWord: "Hello", DariWord: "Salaam"),Word(id: 1, EnglishWord: "Bread", DariWord: "Naan"),Word(id: 2, EnglishWord: "Thank You", DariWord: "Tashakor"),Word(id: 3, EnglishWord: "Yes", DariWord: "Baleh"), Word(id: 4, EnglishWord: "a", DariWord: "a"), Word(id: 5, EnglishWord: "b", DariWord: "b"), Word(id:6, EnglishWord: "c", DariWord: "c"), Word(id: 7, EnglishWord: "d", DariWord: "d")]
}
struct Word: Codable, Identifiable{
var id: Int
var EnglishWord:String
var DariWord:String
init(id: Int, EnglishWord: String, DariWord:String)
{
self.id = id
self.EnglishWord = EnglishWord
self.DariWord = DariWord
}
//Do Json Stuff (Decoding/Encoding)
}
Ответ №1:
Пожалуйста, внимательно прочитайте свой код и сообщение об ошибке. Ошибка довольно очевидна:
Вы захватываете индекс слова в массиве, а не само слово. Удалить Index
Words.words.first(where: {$0.id == wordId})