SwiftUI二维码生成器中如何使用Picker选中的Int值生成二维码
解决SwiftUI中二维码生成函数适配Int类型参数的问题
要让二维码生成函数适配Int类型参数,核心思路是先把Int转换成String,再将String转为QR码生成所需的Data。同时你的代码里还有几处语法和逻辑错误,一起修正如下:
1. 修正后的QRCode视图
import Foundation import SwiftUI import CoreImage.CIFilterBuiltins struct QRCode: View { @State private var selectedAge = 10 // 初始值改为数组内存在的元素,避免Picker初始显示异常 let ages = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] // 变量名改为复数更合理 @State var navigated = false var body: some View { NavigationStack { // iOS 16+推荐用NavigationStack替代NavigationView VStack { Picker("Select Age", selection: $selectedAge) { ForEach(ages, id: \.self) { age in Text("\(age)") } } .pickerStyle(.wheel) // 可选:给Picker添加样式,交互更直观 // 添加导航按钮,跳转到二维码生成视图 NavigationLink("生成二维码", destination: Generate(age: $selectedAge)) } .padding() } } }
2. 修正后的Generate视图
import Foundation import SwiftUI import CoreImage.CIFilterBuiltins struct Generate: View { @Binding var age: Int // 变量名改为小写开头,符合Swift命名规范 private let qrFilter = CIFilter.qrCodeGenerator() private let context = CIContext() var body: some View { VStack { Image(uiImage: generateQRCode(from: age)) .interpolation(.none) .resizable() .scaledToFit() .frame(width: 150, height: 150) } .navigationTitle("二维码") } // 适配Int参数的二维码生成函数 func generateQRCode(from number: Int) -> UIImage { // 1. 将Int转为String let stringValue = String(number) // 2. 将String转为UTF-8编码的Data guard let data = stringValue.data(using: .utf8) else { return UIImage(systemName: "xmark") ?? UIImage() } // 3. 设置QR码生成器的输入数据 qrFilter.setValue(data, forKey: "inputMessage") // 4. 生成并返回二维码图片 guard let qrImage = qrFilter.outputImage, let cgImage = context.createCGImage(qrImage, from: qrImage.extent) else { return UIImage(systemName: "xmark") ?? UIImage() } return UIImage(cgImage: cgImage) } }
关键说明
- Int转String再转Data:QR码生成器
qrCodeGenerator要求输入UTF-8编码的Data,所以先把Int转成字符串,再通过data(using: .utf8)得到符合要求的Data。 - 代码修正点:
- 替换所有中文引号为英文引号,避免语法错误
- 修正
uft8拼写错误为utf8 - 优化变量命名,符合Swift编码规范
- 修复Generate视图中调用生成函数的参数错误
- 用
NavigationStack替代旧的NavigationView(iOS 16+适用,兼容旧版本可改回) - 补充跳转按钮,完善完整流程
内容的提问来源于stack exchange,提问作者user20776389
相关产品推荐
相关产品推荐

