A planilha SwiftUI mostra a planilha com dados errados
Aug 15 2020
Eu tenho uma lista que exibe 1, 2 e 3. Quando o texto é tocado, o aplicativo abre uma planilha com o número tocado. No entanto, se eu tocar no texto na segunda ou terceira linha, o número exibido na folha ainda será 1. O que estou fazendo de errado?
import SwiftUI
struct ContentView: View {
var numbers = [1, 2, 3]
@State private var shouldPresentSheet = false
var body: some View {
List(self.numbers, id: \.self) { number in
Text("number: \(number)").sheet(isPresented: self.$shouldPresentSheet) {
Text("This is sheet number \(number)")
}.onTapGesture {
self.shouldPresentSheet.toggle()
}
}
}
}
Respostas
pawello2222 Aug 15 2020 at 20:37
Você precisa criar uma folha em vez de várias folhas.
Se quiser usar, .sheet(isPresented:content:)
você pode fazer o seguinte:
struct ContentView: View {
var numbers = [1, 2, 3]
@State private var selectedNumber: Int?
var body: some View {
List(numbers, id: \.self) { number in
Text("number: \(number)")
.onTapGesture {
self.selectedNumber = number
}
}
.sheet(isPresented: binding) {
Text("This is a sheet number \(self.selectedNumber ?? 0)")
}
}
var binding: Binding<Bool> {
.init(
get: { self.selectedNumber != nil },
set: { _ in }
)
}
}
Alternativamente, você pode usar .sheet(item:content:)
:
struct Model: Identifiable {
let id: Int
}
struct ContentView: View {
var numbers = [1, 2, 3].map(Model.init)
@State private var selectedNumber: Model?
var body: some View {
List(numbers, id: \.id) { number in
Text("number: \(number.id)")
.onTapGesture {
self.selectedNumber = number
}
}
.sheet(item: $selectedNumber) { item in
Text("This is a sheet number \(item.id)")
}
}
}
EDITAR
Se decidir usar, .sheet(item:content:)
você pode adicionar uma extensão para Int
(em vez de criar uma estrutura personalizada em conformidade com Identifiable
):
extension Int: Identifiable {
public var id: Int { self }
}
como proposto na resposta de Asperi .
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino