enum SectionType: String, CaseIterable {
    case top = "Top"
    case best = "Best"
}

struct ContentView : View {
    @State private var selection: Int = 0

    var body: some View {
        SegmentedControl(selection: $selection) {
            ForEach(SectionType.allCases.identified(by: \.self)) { type in
                Text(type.rawValue).tag(type)
            }
        }
    }
}

我如何运行代码(例如$selection状态改变时的print("Selection changed to \(selection)")?我查看了文档,但什么都找不到.

推荐答案

不能在@State上使用didSet observer,但可以在ObservableObject属性上使用.

import SwiftUI
import Combine

final class SelectionStore: ObservableObject {
    var selection: SectionType = .top {
        didSet {
            print("Selection changed to \(selection)")
        }
    }

    // @Published var items = ["Jane Doe", "John Doe", "Bob"]
}

然后像这样使用:

import SwiftUI

enum SectionType: String, CaseIterable {
    case top = "Top"
    case best = "Best"
}

struct ContentView : View {
    @ObservedObject var store = SelectionStore()

    var body: some View {
        List {
            Picker("Selection", selection: $store.selection) {
                ForEach(FeedType.allCases, id: \.self) { type in
                    Text(type.rawValue).tag(type)
                }
            }.pickerStyle(SegmentedPickerStyle())

            // ForEach(store.items) { item in
            //     Text(item)
            // }
        }
    }
}

Swift相关问答推荐

Swift concurrency reload/await,支持只执行成功并重试

如何在SWIFT任务中判断当前任务是否已取消(异步/等待)

如何在SwiftUI中做出适当的曲线?

有条件地在同一视图上设置两个不同的过渡

如何增加 NSStatusBar 图像大小?

ClosedRange.Swift 中 Int 的索引?

无论玩家移动到视图内的哪个位置,如何使用 SpriteKit 让敌人向玩家emits 子弹?

在 RealityKit 中查找特定模型的 findEntity(named:) 方法的替代方法?

列表不显示信息

memcpy 复制带偏移量的数组

如何在 swift 5.0 中获取当前行

URL appendPathComponent(_:) 已弃用?

Firebase removeObserver 在 Swift 5 中不起作用

SwiftUI View .tint(_ Color) 方法不起作用

为什么 SwiftUI 不在工具栏菜单中反映 @State 属性值?

Swift 读写图片占用大量内存

在 Swift 中返回实例类型

Swift:如何从函数返回类类型

swift中静态函数和单例类的区别

Swift - 要求实现协议的类是某个类的子类