в приложении реального мира может быть какая-то бизнес-логика c происходит внутри действия кнопки
кажется немного логичным. Вы можете просто условно отключить ссылку (и сообщите пользователю, что ссылка недоступна визуально)
NavigationLink(...).disabled(onCondition)
где
func disabled(_ disabled: Bool) -> some View
Параметры
отключены
A Boolean значение, определяющее, могут ли пользователи взаимодействовать с этим представлением.
Возвращаемое значение
Представление, определяющее, могут ли пользователи взаимодействовать с этим представлением.
Обсуждение
Высшие представления в иерархии представлений могут переопределять значение, установленное для этого представления. В следующем примере кнопка не является интерактивной, поскольку внешний отключенный модификатор (_ :) переопределяет внутренний:
HStack {
Button(Text("Press")) {}
.disabled(false)
}
.disabled(true)