我们可以简单地使用Combine的delay()
运算符.
import SwiftUI
import Combine
struct ContentView: View {
let images = [ "square.and.arrow.up", "pencil.circle.fill", "moon.stars.fill"]
@State private var activeImageIndex = 0
@State private var cancellable: AnyCancellable? = nil
var body: some View {
Button {
cancellable = [0,1,2].publisher
.flatMap(maxPublishers: .max(1)) { Just($0).delay(for: 3, scheduler: RunLoop.main) } //<- delay for: 3 sec
.sink { value in
activeImageIndex = value
}
} label: {
Image(systemName: images[activeImageIndex])
.animation(.easeIn, value: activeImageIndex)
}
}
}