想在方程式中使用@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 变量的主要内容,如果未能解决你的问题,请参考以下文章

绘制趋势线和ggplot中多个变量的方程式

R中的方程式工具变量回归(控制函数)

使用python解方程组

Matlab求解微分代数方程 (DAE)

求解一个变量中的线性方程

使用线性回归求解两个变量方程