Tenho um modelo SwiftData e recentemente adicionei um novo Array que está segurando "Seções" como Strings. Não importa o que eu tente, não consigo fazer o Swift passar por esse Array de forma alguma usando ForEach, For ou uma List. Sempre recebo este erro:
Generic parameter 'V' could not be inferred
Se eu usar outro Array tapas.asanas, ele funciona perfeitamente.
Aqui está o trecho de código, o erro é mostrado na linha Section("Sections").
Section("Sections") {
TextField("Add a new Section", text: $sectionName)
.padding([.top, .bottom], 10)
Button(action: {
tapas.tapasSections.append(sectionName)
sectionName = ""
}, label: {
Text("Add Section")
})
List(tapas.tapasSections) { name in
Text("\(name)")
}
}
E aqui está o modelo SwiftData:
import Foundation
import SwiftData
@Model
class Tapas {
var name: String
/// Time Frame of the Tapas
var currentDay: Int
var lengthInDays: Int = 21
var lastDay: Date
var startDay: Date = Date()
var intention: String
var intentionEvoked: Bool = false
var rules: String = ""
var supportTime: [Date] = []
var tapasSections: [String] = []
var recuperated: Bool
var tapasType: String
var isActive: String
var recupType: String /// NoRecoup, TimedRecoup, UnlimitedRecoup for No recouperations, Recouperations before Last Day, And even after
var resetTime: Date
var color: String
/// Adding a relation to TapasAsana, as one Tapas has many Asanas
@Relationship(deleteRule: .cascade) var asanas = [TapasAsana]()
init(name: String = "", intention: String = "", currentDay: Int = 1, lengthInDays: Int = 49, lastDay: Date = .now, recuperated: Bool = false, tapasType: String = "hatha", isActive: String = "dormant", recupType: String = "NoRecoup", resetTime: Date = .now, color: String = "blue") {
self.name = name
self.intention = intention
self.currentDay = currentDay
self.lengthInDays = lengthInDays
self.lastDay = lastDay
self.recuperated = recuperated
self.tapasType = tapasType
self.isActive = isActive
self.recupType = recupType
self.resetTime = resetTime
self.color = color
}
}
Como eu disse antes, esse Array de relacionamento chamado asanas está funcionando em qualquer ForEach ou List, também neste código acima. Substituir tapas.tapasSections por tapas.asanas resolve o erro.
O motivo pelo qual isso não está compilando é porque
String
não está,Identifiable
mas o inicializador do queList
você está usando precisa que esteja.Existem 2 soluções possíveis aqui:
Fazer
String
conformeIdentifiable
Use um inicializador diferente para
List
Substituir
tapas.tapasSections
portapas.asanas
funciona porque o@Model
wrapper faz aTapasAsana
classe estar em conformidade comPersistentModel
o que a faz estar em conformidade comIdentifiable
.Documentação