我正在尝试使用SwiftUI实现滑动以编辑动作。删除动作和移动动作都可以很好地工作,但是我不知道如何启用滑动来编辑动作。
当用户将激活滑动以进行编辑操作时,我想打开编辑屏幕。
这是我的代码:
struct TableView : View {
@State var dataSource = DataSource()
var body: some View {
NavigationView {
List {
ForEach(dataSource.pokemons.identified(by: \.id)) { pokemon in
Text(pokemon.name)
}
.onDelete(perform: deletePokemon)
.onMove(perform: movePokemon)
}
.navigationBarItems(leading: EditButton(), trailing: Button(action: addPokemon, label: { Text("Add") }))
.navigationBarTitle(Text("Pokemons"))
}
}
Run Code Online (Sandbox Code Playgroud) 我想从 REST API 获取数据,为此,我需要首先获取一组 ID - 第一次调用。之后,我需要使用每个 ID 进行 API 调用。我不想使用completionHandlers 而是Combine。我从 dataTaskPublishers 开始,但我不确定如何将它们链接起来才能正常工作
到目前为止,这是我的代码:
private func getIDs(for type: DataType) -> AnyPublisher<[ID], Error> {
guard let url = URL(string: "url")
else { fatalError("Wrong URL") }
return session.dataTaskPublisher(for: url)
.receive(on: RunLoop.main)
.map { $0.data }
.decode(type: [ID].self, decoder: decoder)
.eraseToAnyPublisher()
}
private func getData(with id: ID) -> AnyPublisher<MyData, Error> {
guard let url = URL(string: "url_with_id")
else { fatalError("Wrong URL") }
return session.dataTaskPublisher(for: url)
.receive(on: RunLoop.main)
.map { $0.data }
.decode(type: …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建自定义过渡,但是“跳转” tableView有问题。如您所见,在过渡之前,tableView隐藏在navigationBar下,这是错误的。我该如何解决?动画代码:
UIView.animate(withDuration: transitionDuration, delay: 0, options: animationOptions, animations: { [weak self] in
guard let self = self else { return }
fromVC.view.transform = CGAffineTransform(scaleX: 0.9, y: 0.855)
fromVC.view.layer.cornerRadius = self.cornerRadius
fromVC.view.clipsToBounds = true
self.containerView.frame.origin.y -= self.containerHeight
self.topView.frame.origin.y -= self.containerHeight
self.backdropView.alpha = self.backdropAlpha
}, completion: { _ in
transitionContext.completeTransition(true)
})
Run Code Online (Sandbox Code Playgroud)