我将集数据显示为垂直堆栈中的列表。
当用户点击某一集时,我想将该集存储为selected_episode
。
在视图结构的顶部,我实例化了json文件中的剧集数组。然后,我要确保所选的剧集最初是第一集。我想我可以在init()
中做到这一点。
然而,selected_episode
似乎从未被设置。在按钮动作中,它不会展开,因为它总是nil。
在哪里/如何设置selected_episode
的初始值?
struct ContentView: View {
let episodes = Bundle.main.decode([Episode].self, from: "episodes.json" )
@State private var selected_episode : Episode?
init() {
selected_episode = episodes.first
}
var body: some View {
VStack {
List(episodes) { episode in
Button(action: {
if let obj = selected_episode {
if (episode.id != obj.id) {
selected_episode = episode
}
}
...
- 移动代码将数据加载到
init
方法 - 用
State(wrappedValue:)
初始化@State
属性 - 请命名变量lowerCamelCase
struct ContentView: View {
let episodes : [Episode]
@State private var selectedEpisode : Episode?
init() {
self.episodes = Bundle.main.decode([Episode].self, from: "episodes.json" )
_selectedEpisode = State(wrappedValue: episodes.first)
}
...