我试图使动画进度达到某个数值。我得到错误,我不知道是什么原因。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")
]
}
}
第一节第一节第一节第一节第一次
2条答案
按热度按时间kmpatx3s1#
您的
number
属性是String
,而Double(total)
是Double
。不能使用<
运算符比较String
和Double
。number
属性和total
属性都应该声明为Double
,这样就不必不断地将它们从String
转换为Double
。此外,您不能为
Double(number)
这样的函数调用赋值,因此Double(number) += ...
无法工作。此外,不能为使用
let
声明的属性(如let number: String
)赋值。此外,如果要修改
onReceive
主体中的属性,则需要使用@State
或@Binding
Package 该属性。cgfeq70w2#
你能提供完整的代码文件?在屏幕截图有多个错误:
1.不能比较
number
和Double(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...