SwiftUI: как перейти на другой экран после аутентификации с помощью Face/Touch ID
В очень простом приложении с использованием SwiftUI у меня есть два представления: HomeView
а также DetailView
.
HomeView
этоList
с предметами типаItem
. Этот тип имеет свойство, называемоеisLocked
.DetailView
- это простой вид, показывающий имя выбранного элемента.Biomerty
это обертка дляLAContext
который вызывает оценку биометрии и возвращает результат в виде простогоResult<Bool, Error>
тип.
Как мне перейти к DetailView
для предметов, у которых есть свои isLocked
свойство установлено на true
, только после успешной аутентификации по Face/Touch ID?
// Item
struct Item
{
name: String
isLocked: Bool
}
// Row
struct Row: View
{
@Binding var item: Item
var body: some View
{
HStack
{
Image(systemName: "lock.fill")
Text($item.name)
}
}
}
// HomeView
struct HomeView: View
{
@State private var items: [Item] = [
Item(name: "Item A", isLocked: false),
Item(name: "Item B", isLocked: true)
]
var body: some View
{
NavigationView
{
List(items, id: \.self)
{
if !item.isLocked
{
NavigationLink(destination: DetailView(item: $item))
{
Row(item: $item)
}
}
else
{
Row(item: $item)
.onTapGesture
{
Biometry.authenticate
{ result in
if case.failure = result
{
}
else
{
// We endup here, because the Face/Touch ID
// authentication was successful. Therefore,
// it is here that I would like to
// navigate to the detail screen.
}
}
}
}
}
}
}
}
// DetailView
struct DetailView: View
{
@Binding var item: Item
var body: some View
{
Text($item.name)
}
}