当前位置: 首页 > 知识库问答 >
问题:

如何快速回传方法处理程序

容鸿畴
2023-03-14

我是Swift的新手,目前,我正在实现验证代码的UI,但我不知道该怎么做。我发现了一些类似于我对StackOverflow的要求的东西,我只是复制并传递到我的项目中,然后正如您在VerificationView_Previews中看到的,我们需要将方法处理程序传回我不知道如何传递帮助,请

//
//  VerificationView.swift
//  UpdateHistory
//
//  Created by Admin on 4/21/21.
//

import SwiftUI

public struct VerificationView: View {

var maxDigits: Int = 6
var label = "Enter One Time Password"
@State var pin: String = ""
@State var showPin = true
var handler: (String, (Bool) -> Void) -> Void
public var body: some View {
    VStack {
        Text(label).font(.title)
        ZStack {
            pinDots
            backgroundField
        }
    }
}
private var pinDots: some View {
    HStack {
        Spacer()
        ForEach(0..<maxDigits) { index in
            Image(systemName: self.getImageName(at: index))
                .font(.system(size: 60, weight: .thin, design: .default))
            Spacer()
        }
    }
}

private func getImageName(at index: Int) -> String {
    if index >= self.pin.count {
        return "square"
    }
    if self.showPin {
        return self.pin.digits[index].numberString + ".square"
    }
    return "square"
}

private var backgroundField: some View {
    let boundPin = Binding<String>(get: { self.pin }, set: { newValue in
        self.pin = newValue
        self.submitPin()
    })
    
    return TextField("", text: boundPin, onCommit: submitPin)
        .accentColor(.clear)
        .foregroundColor(.clear)
        .keyboardType(.numberPad)
}


private var showPinButton: some View {
    Button(action: {
        self.showPin.toggle()
    }, label: {
        self.showPin ?
            Image(systemName: "eye.slash.fill").foregroundColor(.primary) :
            Image(systemName: "eye.fill").foregroundColor(.primary)
    })
}

private func submitPin() {
    if pin.count == maxDigits {
        handler(pin) { isSuccess in
            if isSuccess {
                print("pin matched, go to next page, no action to perfrom here")
            } else {
                pin = ""
                print("this has to called after showing toast why is the failure")
              }
           }
        }
    }
}
extension String {
var digits: [Int] {
    var result = [Int]()
    for char in self {
        if let number = Int(String(char)) {
            result.append(number)
        }
    }
    return result
   }
}

extension Int {

var numberString: String {
    
    guard self < 10 else { return "0" }
    
    return String(self)
   }
}

struct VerificationView_Previews: PreviewProvider {
    static var previews: some View {
        VerificationView() // need to pass method handler
    }

}

共有1个答案

凌炜
2023-03-14

为了查看目的,您可以简单地使用如下所示。预览不需要第二个参数

struct VerificationView_Previews: PreviewProvider {
    
    static var previews: some View {
        VerificationView { (pin, _) in
            print(pin)
        }
    }
}

也可以这样使用

struct VerificationView_Previews: PreviewProvider {
    
    var successClosure: (Bool) -> Void
    
    static var previews: some View {
        VerificationView { (pin, successClosure) in
            
        }
    }
}
 类似资料:
  • 本文向大家介绍如何快速清理 docker 资源的方法,包括了如何快速清理 docker 资源的方法的使用技巧和注意事项,需要的朋友参考一下 如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用。本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的 镜像、容器、网络和数据卷。 查看 docker 占用的

  • 本文向大家介绍pandas 快速处理 date_time 日期格式方法,包括了pandas 快速处理 date_time 日期格式方法的使用技巧和注意事项,需要的朋友参考一下 当数据很多,且日期格式不标准时的时候,如果pandas.to_datetime 函数使用不当,会使得处理时间变得很长,提升速度的关键在于format的使用。下面举例进行说明: 示例数据: date 格式:02.01.2013

  • 我正在尝试在我的Swift应用程序中创建一个服务对象,以便更轻松地处理请求。我已经把它连接起来了,但是我可能误解了完成处理器。 我有这个函数,它只是发布到我正在运行的本地APIendpoint。 我需要做的就是把这个名字传给我在这里做的函数 但是,我现在收到此错误。 调用中缺少参数“completion”的参数 我的目标是返回< code>Response对象,这样我就可以访问它的属性,在UI中做

  • 如何强制GLFW管理每秒60次以上的键盘回调?也就是说,我希望GLFW的键盘处理速度取决于实际的FPS。这可能吗?

  • 问题内容: 我是一个Node.js新手,并且正在用它创建我的第一个大型应用程序(我正在使用Express)。当用户使用get请求加载ID时,我需要让我的网页执行一些javascript画布绘制 我知道我可以用一个简单的方法来处理 但我不知道如何使用该ID的要求的图纸开始我的网页。互联网上Express和Get上的每个教程都说明了如何处理get请求…这个问题是关于“接下来会发生什么?” 改写:我不确

  • 我正在为我的数据流开发新的Nifi处理器。我在eclipse中修改代码,创建新的。nar文件,并将其复制到Nifi lib中进行测试。 有没有更好的方法来测试你的新。NAR在Nifi?因为每一个小的变化都重启Nifi会降低你的开发速度。