我现在正在学习 Swift Combine,找到了非常简单的视频教程,但是由于某种原因,当我尝试在 PassthroughSubject<Int, WeatherError>() 中使用我的枚举时出现错误
检查此代码:
import Combine
enum WeatherError: Error {
case thingsJustHappen
}
let weatherPublisher = PassthroughSubject<Int, WeatherError>()
let subscriber = weatherPublisher
.filter {$0 > 10}
.sink { value in
print("\(value)")
}
weatherPublisher.send(10)
weatherPublisher.send(30)
Run Code Online (Sandbox Code Playgroud)
“.filter”突出显示,错误是:
Referencing instance method 'sink(receiveValue:)' on 'Publisher'
requires the types 'Publishers.Filter<PassthroughSubject<Int, WeatherError>>.Failure'
(aka 'WeatherError') and 'Never' be equivalent
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,这段代码在视频教程中有效。我怎样才能让我的 WeatherError 和 Never 相等???
我有一个愚蠢的问题,但由于某种原因我无法解决它。我尝试使用 AVAudioPlayer 播放声音,但听不到任何声音。没有错误,但我的应用程序仍然保持沉默。它是用 SwiftUI 构建的。这是一段代码:
struct SoundsListView: View {
var body: some View {
List(Helpers.shared.sounds, id:\.self) { item in
Text(item)
Spacer()
Button(action: {
var soundPlayer: AVAudioPlayer?
guard let audioFile: URL = Bundle.main.url(forResource: "Analog watch", withExtension: "mp3") else { return }
do {
soundPlayer = try AVAudioPlayer(contentsOf: audioFile)
print(soundPlayer)
guard let player = soundPlayer else { return }
player.play()
} catch let error {
print("Cannot play sound")
}
}) {
Image(systemName: "play")
} //: BUTTON
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有错误,声音文件也设置了目标成员资格。(奇怪的是,同一段代码适用于我的旧项目,但是是用 Swift + …