import Foundation @available(iOS 13, macOS 10.15, *) public enum NFCViewDisplayMessage { case requestPresentPassport case authenticatingWithPassport(Int) case readingDataGroupProgress(DataGroupId, Int) case error(NFCPassportReaderError) case successfulRead } @available(iOS 13, macOS 10.15, *) extension NFCViewDisplayMessage { public var description: String { switch self { case .requestPresentPassport: return "Hold your iPhone near an NFC enabled passport." case .authenticatingWithPassport(let progress): let progressString = handleProgress(percentualProgress: progress) return "Authenticating with passport.....\n\n\(progressString)" case .readingDataGroupProgress(let dataGroup, let progress): let progressString = handleProgress(percentualProgress: progress) return "Reading \(dataGroup).....\n\n\(progressString)" case .error(let tagError): switch tagError { case NFCPassportReaderError.TagNotValid: return "Tag not valid." case NFCPassportReaderError.MoreThanOneTagFound: return "More than 1 tags was found. Please present only 1 tag." case NFCPassportReaderError.ConnectionError: return "Connection error. Please try again." case NFCPassportReaderError.InvalidMRZKey: return "MRZ Key not valid for this document." case NFCPassportReaderError.ResponseError(let description, let sw1, let sw2): return "Sorry, there was a problem reading the passport. \(description) - (0x\(sw1), 0x\(sw2)" default: return "Sorry, there was a problem reading the passport. Please try again" } case .successfulRead: return "Passport read successfully" } } func handleProgress(percentualProgress: Int) -> String { let p = (percentualProgress/20) let full = String(repeating: "🟢 ", count: p) let empty = String(repeating: "⚪️ ", count: 5-p) return "\(full)\(empty)" } }