相关疑难解决方法(0)

SwiftUI 在变量更改时调用函数

我正在尝试将 watchOS 应用程序的视图转换为 Swift UI。我想将 watchKit 中的音量控制移植到带有自定义控件的 SwiftUI。在下图中,您可以看到视图的当前状态。

音量控制会根据当前状态更改铃声的进度,volume并且volume在我转动数码表冠时也会更改。如果没有 SwiftUI,就可以在旋转表冠时调用一个函数。这已经改变了,系统只允许我绑定一个变量。

我想知道的是绑定一个变量并在该变量的每次更改时调用一个函数。因为正常的 Digital Crown 行为不能满足我的需求。

一件事有效,但远非完美是:

.digitalCrownRotation($crownAccumulator, from: -100.0, through: 100.0, by: 1, sensitivity: .low, isContinuous: true, isHapticFeedbackEnabled: true)
.onReceive(Just(self.crownAccumulator), perform: self.crownChanged(crownAccumulator:))
Run Code Online (Sandbox Code Playgroud)

OnReceive 将在每次旋转表冠时调用,但也会在视图的每一次其他更新时调用。

所以我想要的是这样的管道:

皇冠旋转?crownAccumulator变化 ?名为 async 的函数?功能更新volume

过去我会使用 didSet 来完成此操作,但这不再可用

这里是它的代码:


    @ObservedObject var group: Group
    @State var animateSongTitle: Bool = false

    @State var songTitle: String = "Very long song title that should be scrolled"
    @State var artist: String = "Artist name"


    @State …
Run Code Online (Sandbox Code Playgroud)

swift watchos swiftui

17
推荐指数
2
解决办法
1万
查看次数

只读取 CurrentValueSubject?

有没有办法创建CurrentValueSubject只读的?

所以你可以sink公开它,value公开阅读,但只能send在内部/私下对其进行评估。想在库模块中使用它。

swift combine

3
推荐指数
1
解决办法
2581
查看次数

标签 统计

swift ×2

combine ×1

swiftui ×1

watchos ×1