小编Але*_*кий的帖子

SwiftUI 如何防止视图重新加载全身

基本上我试图弄清楚我的 viewModel 何时更新,它会通知视图并刷新整个身体。如何避免这种情况。例如,如果我的视图 GoLiveView 已经呈现另一个视图 BroadcasterView,然后我的 goLiveViewModel 得到更新,GoLiveView 将被刷新,它会再次创建 BroadcasterView,因为 showBroadcasterView = true。正因为如此,它会在未来引起很多问题。

struct GoLiveView: View {

@ObservedObject var goLiveViewModel = GoLiveViewModel()
@EnvironmentObject var sessionStore: SessionStore
@State private var showBroadcasterView = false
@State private var showLiveView = false

init() {
    goLiveViewModel.refresh()
}

var body: some View {
    NavigationView {
        List(goLiveViewModel.rooms) { room in // when goLiveViewModed get updated 
            NavigationLink(destination: LiveView(clientRole: .audience, room: room, showLiveView: $showLiveView))) {
                LiveCell(room: room)

            }
        }.background(Color.white)
        .navigationBarTitle("Live", displayMode: .inline)
        .navigationBarItems(leading:
            Button(action: {
                self.showBroadcasterView = true
        }, …
Run Code Online (Sandbox Code Playgroud)

xcode swift swiftui combine

13
推荐指数
1
解决办法
3566
查看次数

JSON 解码器无法读取数据,因为它的格式不正确

我是新来的。不知何故,我能够理解如何做到这一点。我在下面做,但它给出了错误 - 无法读取数据,因为它的格式不正确。有人可以帮助我吗?从过去的 4 天开始,我一直坚持这一点。我真的很感激。

import SwiftUI
import Foundation
import Combine

struct Movie: Decodable, Identifiable {

    var id: Int
    var video: String
    var vote_count: String
    var vote_average: String
    var title: String
    var release_date: String
    var original_language: String
    var original_title: String
}

struct MovieList: Decodable{
    var results: [Movie]

___________

class NetworkingManager : ObservableObject{
    var objectWillChange = PassthroughSubject<NetworkingManager, Never>()
    @Published var movies = [Movie]()

   init() {
      load()
   }

   func load(){
       let url = URL(string: "https://api.themoviedb.org/3/discover/movie?sort_by=popularity.desc&api_key=<HIDDEN>")!  

    URLSession.shared.dataTask(with: url){ (data, response, error) in

        do …
Run Code Online (Sandbox Code Playgroud)

json swiftui

6
推荐指数
1
解决办法
1426
查看次数

如何在 SwiftUI 中控制 AVPlayer?

在我的新 SwiftUI 项目中,我有一个用于从 url 流式传输音乐的 AVPlayer。现在我需要通过滑块控制播放曲目的当前时间和音量,这是设计的一部分:

在此处输入图片说明

现在我可以使用 UserData 最终类及其 @Published 变量来控制播放器,例如isPlaying

final class UserData: ObservableObject {
    // ...
    @Published var player: AVPlayer? = nil
    @Published var isPlaying: Bool = false
    //...

    func playPausePlayer(withSong song: Song, forPlaylist playlist: [Song]?) {
        //...
        if isPlaying {
            player?.pause()
        } else {
            player?.play()
        }

        isPlaying.toggle()
    }

}

Run Code Online (Sandbox Code Playgroud)

很高兴知道这部分是否有更好的决定

问题是属性currentTimeduration我只能从playeror 中获取player?.currentItem,所以我不能像这样制作滑块:

@EnvironmentObject var userData: UserData
// ...
Slider(value: userData.player?.currentItem?.currentTime()!, in: 0...userData.player?.currentItem?.duration as! Double, step: 1)
Run Code Online (Sandbox Code Playgroud)

我怎样才能控制这些事情?

binding avplayer swiftui

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

标签 统计

swiftui ×3

avplayer ×1

binding ×1

combine ×1

json ×1

swift ×1

xcode ×1