Хотите использовать переменные @Binding в уравнениях - PullRequest
0 голосов
/ 15 января 2020
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.

Я пытаюсь использовать 'rate' в уравнении для определения 'apr / 12'. Я думаю, что работал раньше в более ранней версии XCode, но теперь все, что я получаю, это: «Невозможно использовать элемент экземпляра« apr »в инициализаторе свойства; инициализаторы свойства запускаются до того, как станет доступным« self »» ». Я знаю, что использую типы привязки, но даже когда я меняю тип с помощью Double (), я все равно получаю ошибки. Любая помощь будет оценена.

1 Ответ

1 голос
/ 15 января 2020

Кажется, что вы пытаетесь получить доступ к одному из своих свойств в своей структуре до завершения 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)")
    }
}

Вы можете получить доступ к свойству '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)")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...