想在方程式中使用@Binding 变量
Posted
技术标签:
【中文标题】想在方程式中使用@Binding 变量【英文标题】:Want To Use @Binding Variables In Equations 【发布时间】:2020-01-15 05:59:47 【问题描述】:struct FinanceOutput: View
@Binding var price: Double
@Binding var down: Double
@Binding var apr: Double
private var rate: Double = 0.0
init(price: Binding<Double>, down:Binding<Double>, apr:Binding<Double>, of rate: Double )
self._price = price
self._down = down
self._apr = apr
self.rate = rate
以上是我的代码,我确实在另一个视图中正确定义了@Binding 变量——使用@State。
我要做的是在等式中使用“率”来定义“apr/12”。我想我以前在早期版本的 Xcode 中解决了这个问题,但现在我得到的只是:“不能在属性初始化程序中使用实例成员 'apr';属性初始化程序在 'self' 可用之前运行。” 我知道我正在使用 Binding 类型,但即使我使用 Double() 更改类型,我仍然会收到错误。任何帮助,将不胜感激。
【问题讨论】:
提供的代码快照在我身边正确编译。请显示产生上述错误的代码。 【参考方案1】:您似乎正试图在 init() 完成之前访问您的结构中的一个属性,例如:
struct FinanceOutput: View
@Binding var price: Double
@Binding var down: Double
@Binding var apr: Double
private var rate: Double = 0.0
init(price: Binding<Double>, down: Binding<Double>, apr: Binding<Double>, of rate: Double)
self._price = price
self._down = down
self._apr = apr
self.rate = rate
apr = rate // error: Cannot use instance member 'apr' within property initializer; property initializers run before 'self' is available.
var body: some View
Text("\(apr/rate)")
您可以从正文中访问“速率”属性,例如:
let input = Input(price: 10.0, down: 10.0, apr: 10.0)
struct FinanceOutput: View
@Binding var price: Double
@Binding var down: Double
@Binding var apr: Double
private var rate: Double = 0.0
init(price: Binding<Double>, down: Binding<Double>, apr: Binding<Double>, of rate: Double)
self._price = price
self._down = down
self._apr = apr
self.rate = rate
var body: some View
Text("\(apr/rate)") // shows apr/rate properly
struct ContentView_Previews: PreviewProvider
static var previews: some View
FinanceOutput(price: input.$price, down: input.$down, apr: input.$apr, of: 12.0)
struct Input: View
@State var price: Double
@State var down: Double
@State var apr: Double
var body: some View
Text("\(price), \(down), \(apr)")
【讨论】:
我检查了你的答案,我得到了一个未定义的答案 (apr/rate)--rate 等于 0。我将“private var rate: Double = 0.0”更改为“private var rate: Double = 12.0" 仍然没有运气。我想要做的是有一个变量,我可以使用我的@Binding 变量计算汽车付款。 在上面的示例中,我使用了固定值,而不是数字的真实示例。此外,我只将 apr 除以费率( 10.0 / 12.0 = 0.833333 )。如果您的值为 0,则可能您正在使用 Double 到 Int 的转换并在某处进行初始化 [例如:Int(apr/rate)]。尝试仅使用上面的示例而不做任何修改,以了解您应该在哪里以及应该更改什么。注意:Input 类是可以用实数初始化的类,然后您可以在 FinanceOutput 的主体中使您的方程式逻辑(例如通过方法)。 使用您的答案和另一个答案修复了问题:***.com/questions/56800369/swiftui-state-variables。欣赏信息。谢谢。 我很高兴能帮上忙。您可以评价我的答案,并将其标记为已解决;)以上是关于想在方程式中使用@Binding 变量的主要内容,如果未能解决你的问题,请参考以下文章