I am new to swift and i am using swiftui to create a qr code generator. I want to use a picker to select number and it shows in the qr code, when i finished the picker and i was trying to add function as qr code generator and the integer needs to be convert to string, so it can be used in the function. How can i make the function work with Integer?
Here is my code which i tried:
I used age as Integer with picker
import Foundation
import SwiftUI
import CoreImage.CIFilterBuiltins
struct QRCode: View {
@State private var selectedAge = 1
let age = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
@State var navigated = false
var body: some View {
NavigationView{
VStack{
Picker(“Select Age”, selection: $selectedAge) {
ForEach(age,id:\.self) {
ages in Text(“\(ages)”) }
}
}
}
}
}
//Below is the other view with the function
import Foundation
import SwiftUI
import CoreImage.CIFilterBuiltins
struct Generate: View {
@Binding var Ages: Int
let filter = CIFilter.qrCodeGenerator()
let cont = CIContext()
var body: some View {
NavigationView{
Image(uiImage: GenerateQRCode(old: old))
.interpolation(.none)
.resizable()
.frame(width: 150, height: 150, alignment: .center)
}
}
func GenerateQRCode(old: Int)-> UIImage {
let com = Ages
let con = com.data(using: .uft8)
filter.setValue(con, 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()
}
}
Try this simple approach to "...make the function work with Integer".
Note the name change ages/age
for clarity.
struct ContentView: View {
var body: some View {
QRCode()
}
}
struct QRCode: View {
@State private var selectedAge = 1
let ages = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] // <-- ages
@State var navigated = false
var body: some View {
NavigationView {
VStack {
Picker("Select Age", selection: $selectedAge) {
ForEach(ages, id: \.self) { age in
Text("\(age)")
}
}.pickerStyle(.wheel) // <-- for testing
Generate(age: $selectedAge)
}
}
}
}
struct Generate: View {
@Binding var age: Int
let filter = CIFilter.qrCodeGenerator()
let cont = CIContext()
var body: some View {
Image(uiImage: GenerateQRCode(old: age))
.interpolation(.none)
.resizable()
.frame(width: 150, height: 150, alignment: .center)
}
func GenerateQRCode(old: Int)-> UIImage {
let data = String(old).data(using: .utf8) // <-- here
filter.setValue(data, forKey: "inputMessage") // <-- here
if let qr = filter.outputImage {
if let qrImage = cont.createCGImage(qr, from: qr.extent) {
return UIImage(cgImage: qrImage)
}
}
return UIImage(systemName: "xmark") ?? UIImage()
}
}