【发布时间】:2020-08-27 18:11:48
【问题描述】:
我有两个类 SubmitPhoneView 和 VerifyPhoneView。
由于某种原因,我注意到每当我在 SubmitPhoneView 的文本字段中输入一个数字时,它都会调用 VerifyPhoneView 的 init 方法。我希望它只被调用一次(当我按下 SubmitPhoneView 上的继续按钮时)
为什么会这样?
类SubmitPhoneView:
import SwiftUI
import Firebase
struct SubmitPhoneView: View {
@State private var phoneNumber: String = ""
@State private var verificationID : String = ""
@State private var presentMe = false
var body: some View {
ZStack {
Text("My number is")
HStack(spacing: 20){
Text("+1")
TextField("Enter phone number", text: $phoneNumber)
.keyboardType(.numberPad)
}
VStack {
NavigationLink(destination: VerifyPhoneView(phoneNumber: $phoneNumber.wrappedValue, verificationID: $verificationID.wrappedValue), isActive: $presentMe) { EmptyView() }
Button(action: {
self.submitPhoneNumber()
self.presentMe = true
}) {
Text("Continue")
}
}
}
func submitPhoneNumber() {
PhoneAuthProvider.provider().verifyPhoneNumber("+1" + phoneNumber, uiDelegate: nil) { (verificationID, error) in
if error != nil {
print(error.debugDescription)
return
}
else {
self.verificationID = verificationID!
}
}
}
}
类VerifyPhoneView:
import SwiftUI
import Firebase
struct VerifyPhoneView: View {
private var phoneNumber: String
@State private var verificationID: String
@State private var verificationCode: String = ""
@State private var loginSuccesful: Bool = false
@EnvironmentObject var ls: LoginStatus
@EnvironmentObject var currentUser: CurrentUser
init(phoneNumber: String, verificationID: String) {
print("the init method was called for VerifyPhoneView")
self.phoneNumber = phoneNumber
_verificationID = State(initialValue: verificationID)
print(self.verificationID)
}
var body: some View {
ZStack {
Text("My code is")
TextField("Enter code", text: $verificationCode)
Button(action: {
self.submitVerificationCode()
}) {
Text("Continue")
}
}
}
func submitPhoneNumber() {
// doesn't matter
}
func submitVerificationCode() {
// doesn't matter
}
}
}
【问题讨论】:
-
我将导航链接中的参数更改为硬编码占位符,似乎目的地的 init 只调用了一次。因此,似乎每次电话号码的状态发生变化时,都会调用目标 init 方法。我怎样才能停止这种情况,这样它只会在按下继续按钮时发生?
标签: swiftui