SwiftUI: Using onAppear doesn’t allow Picker value to be changed

Have you tried passing at least the emojiChoice (but probably all those non-private State vars) in as Binding rather than trying to use onAppear to set the correct value?

// Form Variables
@Binding var emojiChoice: Int //Array index (as long as Array<Emoji>.Index is Int)
//the other reminder variables..

//OR as a catch-all
@Binding var reminder: Reminder

//then you can lose this entire thing. 
.onAppear(perform: {
  self.notifyOn = self.reminder.notifyOn
  //what's with this conversion btw...?
  self.emojiChoice = Int(self.reminder.emojiChoice)
  self.notification = self.reminder.notification ?? "unknown"
  self.notes = self.reminder.notes ?? "unknown"
}) 

Anyway no time to test further but the Picker works for me when selecting a new value, so I think you're losing something with this onAppear attempt to set State variables from some passed in Reminder object rather than passing in Bindings to values, which will directly update.

enum EmojiList {
  static let emojis = [ ... ]
}
struct ParentView: View {
  @State private var reminder = Reminder()

  var body: some View {
    NavigationView {
    NavigationLink(
      destination: EditView(reminder: $reminder), //pass Reminder as binding
      label: {
        Text("Edit Reminder")
      })
    }
  }
}
struct EditView: View {
  @Binding var reminder: Reminder
  var body: some View {
    Form {
      Text(EmojiList.emojis[reminder.emojiChoice])
      Picker(selection: $reminder.emojiChoice, label: Text("Emoji")) {
        ForEach(EmojiList.emojis.indices, id: \.self) {
          Text(EmojiList.emojis[$0])
        }
      }
    }
  }
}

Might work?

/r/SwiftUI Thread