小编Vol*_*r88的帖子

当@State 变量以高频率刷新视图时,导航栏/工具栏按钮工作不可靠

我注意到当至少有一个 @State 变量经常刷新视图时,导航栏/工具栏按钮无法正常工作。

我创建了一个简单的应用程序来测试它。

在下面的代码示例中,您有 3 个选项来触发模式表。一个按钮在主视图中,一个在工具栏中,一个在导航栏中。

当我的计时器没有更新“数字”时,所有 3 个按钮都正常工作。当我启动计时器时,它将每 0,1 秒刷新一次视图,只有主视图中的按钮每次都会工作。工具栏/导航栏中的按钮大部分时间都不起作用。(我的计时器的 TimeInterval 越短,按钮的工作就越少)

import SwiftUI

struct ContentView: View {

    @State private var number = 0
    @State private var showModal = false

    func startTimer() {
        Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { (_) in
            number += 1
        }
    }

    var body: some View {

        NavigationView {
            VStack {
                Text("Count \(number)")
                Button(action: startTimer, label: {
                    Text("Start Timer")
                })

                Button(action: { showModal.toggle() }, label: {
                    Text("Open Modal")
                })
            }
            .navigationBarTitle("Home", displayMode: .inline)
            .navigationBarItems(leading:
                                    Button(action: …
Run Code Online (Sandbox Code Playgroud)

xcode swift swiftui

7
推荐指数
1
解决办法
2627
查看次数

无法使用 ForEach 循环 PHFetchResult

我目前正在开发一款适用于 iOS / macOS 的照片应用程序,但我正在努力使用 PhotoKit。

我确实创建了一个类来管理我所有的 PhotoKit 请求。

class PhotosAPI: ObservableObject {

@Published var all = PHFetchResult<PHAsset>()
@Published var allAlbums = PHFetchResult<PHAssetCollection>()
@Published var allSmartAlbums = PHFetchResult<PHAssetCollection>()

// Functions to get the Collections / Assets

}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这部分正在工作,但现在我正在努力在我的视图中显示这些数据。

在我看来,我想在列表/网格中呈现所有资产

struct ShowImages: View {

    @ObservedObject var photos = PhotosAPI()

    var body: some View {
        List(photos.all, id: \.self) { item in
            Text("\(item)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我确实收到错误“初始化程序‘init(_:id:rowContent:)’要求‘PHFetchResult’符合‘RandomAccessCollection’”,我今天一整天都在尝试解决这个问题,但我没有成功,我也做不到。在谷歌上找不到任何有用的东西。

有谁知道我如何让 PHFetchResults 循环它们?

最后我能够用下面的代码显示图片。但这对我来说看起来是非常糟糕的代码。我更喜欢直接循环 PHFetchResult。有谁知道我怎样才能完成这件事?

ForEach(0..<photos.all.count) { index in
    Text("\(photos.all.object(at: index).localIdentifier)")
}  

       
Run Code Online (Sandbox Code Playgroud)

xcode swift photokit swiftui

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

标签 统计

swift ×2

swiftui ×2

xcode ×2

photokit ×1