SwiftUI中如何为二维码生成函数添加多个参数?
解决Swift二维码生成器添加整数参数的错误
你只修改了imageGenerate函数的参数定义,但遗漏了参数传递路径的更新、调用处传参以及UI层的变量绑定,以下是完整的修正步骤和代码:
核心修改点
- 在根视图添加整数状态变量,用于存储或传递整数参数
- 给
GenerateQRCode视图添加对应的绑定变量,接收整数参数 - 更新
imageGenerate函数的调用,传入新的整数参数 - 将整数参数整合到二维码的内容中(你之前添加了参数但未实际使用)
完整修正后的代码
import Foundation import SwiftUI import CoreImage.CIFilterBuiltins struct ContentView: View { @State var start = Date() // 添加整数状态变量,示例为时长(可根据需求调整用途) @State var duration = 30 var body: some View { VStack(spacing: 20) { DatePicker("", selection: $start, displayedComponents: [.hourAndMinute]) .datePickerStyle(.wheel) // 添加整数输入UI,让用户设置参数 HStack { Text("时长(分钟):") TextField("输入数字", value: $duration, format: .number) .textFieldStyle(.roundedBorder) .frame(width: 100) .keyboardType(.numberPad) } // 传递新的绑定参数给GenerateQRCode GenerateQRCode(start: $start, time: $duration) } .padding() } } struct GenerateQRCode: View { @Binding var start: Date // 添加整数参数的绑定 @Binding var time: Int let filter = CIFilter.qrCodeGenerator() let cont = CIContext() var dateFormatter: DateFormatter { let df = DateFormatter() df.dateFormat = "HH:mm" return df } var body: some View { NavigationView{ // 更新函数调用,传入time参数 Image(uiImage: imageGenerate(start: start, time: time)) .interpolation(.none) .resizable() .frame(width: 150, height: 150, alignment: .center) } .navigationBarBackButtonHidden(true) } // 整合整数参数到二维码内容中 func imageGenerate(start: Date, time: Int)-> UIImage { // 将时间和整数拼接成二维码文本内容,格式可自定义 let timeStr = dateFormatter.string(from: start) let qrContent = "开始时间:\(timeStr),时长:\(time)分钟" let data = qrContent.data(using: .utf8) filter.setValue(data, forKey: "inputMessage") if let qr = filter.outputImage { if let qrImage = cont.createCGImage(qr, from: qr.extent){ return UIImage(cgImage: qrImage) } } return UIImage(systemName: "xmark") ?? UIImage() } }
额外说明
- 你原代码里
ContentView中的Generate(start: $start)是笔误,已修正为GenerateQRCode(start: $start) - 示例中把整数作为「时长」参数整合到二维码内容,你可以根据需求调整文本拼接格式
- 如果不需要用户输入整数,可直接在
ContentView中给duration赋值固定值,或从其他数据源传递参数
内容的提问来源于stack exchange,提问作者Steady
相关产品推荐
相关产品推荐

