[Xcode/SwiftUI] URLをQRコードに変換して表示する

実装方法

import SwiftUI
import CoreImage.CIFilterBuiltins

struct ContentView: View {
    // QRコードに変換するURL文字列
    private let urlString = "<#遷移先のURL#>"

    var body: some View {
        VStack {
            Text("QRコードだよ")
            // QRコード画像が生成できた場合、それを表示
            if let qrCodeImage = generateQRCode(from: urlString) {
                Image(uiImage: qrCodeImage)
                    .interpolation(.none) // 画像の補間を無効にする(ぼやけ防止)
                    .resizable()
                    .frame(width: 200, height: 200)
            } else {
                // QRコードが生成できなかった場合のエラーメッセージ
                Text("Failed to generate QR Code")
            }
        }
    }

    private func generateQRCode(from urlString: String) -> UIImage? {
        // URL文字列をUTF-8形式のデータに変換
        let data = Data(urlString.utf8)
        // QRコードを生成するフィルター(Core Imageの機能)
        let filter = CIFilter.qrCodeGenerator()
        // 生成するQRコードにデータを設定("inputMessage"というキーを使用)
        filter.setValue(data, forKey: "inputMessage")

        if let ciImage = filter.outputImage {
            // 生成されたQRコードが小さいため、拡大する(10倍に拡大)
            let transform = CGAffineTransform(scaleX: 10, y: 10)
            let scaledCIImage = ciImage.transformed(by: transform)
            let context = CIContext()
            if let cgImage = context.createCGImage(scaledCIImage, from: scaledCIImage.extent) {
                return UIImage(cgImage: cgImage)
            }
        }
        // QRコード生成に失敗した場合はnilを返す
        return nil
    }
}