swift 如何使加载动画进度?

izkcnapc  于 2023-02-15  发布在  Swift
关注(0)|答案(2)|浏览(199)

我试图使动画进度达到某个数值。我得到错误,我不知道是什么原因。SwiftUi IOS 15
参数是什么-编号:600;总计:1000
我正在尝试运行一个进度动画到数字600/1000

let number: String
let total: Int
let timer = Timer.publish(every: 0.1, on: .main, in: .common).autoconnect()

ProgressView(name, value: Double(number), total: Double(total))
  .onReceive(timer) { _ in
      if number < Double(total) {
         Double(number) += Double.random(in: 0...4)
         }
     }

UPD:这是我最初没有添加的代码的一部分

struct Params: Identifiable {
    let id = UUID()
    let num: String
}

extension Params {
    static func getAll() -> [Params] {
        return [
            Params(num: "650"),
            Params(num: "80"),
            Params(num: "900")
        ]
    }
}

第一节第一节第一节第一节第一次

kmpatx3s

kmpatx3s1#

您的number属性是String,而Double(total)Double。不能使用<运算符比较StringDouble
number属性和total属性都应该声明为Double,这样就不必不断地将它们从String转换为Double
此外,您不能为Double(number)这样的函数调用赋值,因此Double(number) += ...无法工作。
此外,不能为使用let声明的属性(如let number: String)赋值。
此外,如果要修改onReceive主体中的属性,则需要使用@State@Binding Package 该属性。

import SwiftUI

struct DemoView: View {
    var name: String
    var max: Double
    var total: Double
    @State var number: Double = 0
    
    var body: some View {
        VStack {
            ProgressView(name, value: number, total: total)
                .onReceive(
                    Timer.publish(
                        every: 0.1,
                        on: .main,
                        in: .common
                    ).autoconnect()
                ) { _ in
                    if number < max {
                        number += Double.random(in: 0...4)
                    }
                }
            
            Button("Reset") { number = 0 }
        }
    }
}

import PlaygroundSupport
PlaygroundPage.current.setLiveView(
    DemoView(
        name: "Test",
        max: 600,
        total: 1000
    ).padding()
)
cgfeq70w

cgfeq70w2#

你能提供完整的代码文件?在屏幕截图有多个错误:
1.不能比较numberDouble(total),因为它们的类型不同。如果要比较String中的某个数字,请先将字符串转换为数字,例如:let intFromString = Int(number),那么您将能够像这样进行比较:if intFromString < total { ... }
1.不能将Double添加到String中。可以将Double添加到另一个Double中,如果在某个视图中发生这种情况,则应使用@State属性,例如:

  • @State var number: Double = 0
  • @State var total: Int = 0

以及更高版本:number += Double.random...

相关问题