The problem now, is that when you activate your NFCReader, it does not immediately return the tag... ...so you can not immediately assign reader.tagUID To solve this, in NFCReader we can Publish the tagCode... ...and in the View, we show this published value. Then, when NFCReader gets the tagCode, it will automatically update your SwiftUI View. Try this: import SwiftUI import CoreNFC struct ContentView: View { @StateObject private var reader = NFCReader() var body: some View { VStack{ Text(reader.tagUID) Button { reader.activate() } label: { Text(Scan) .font(.title) }.padding() } } } class NFCReader: NSObject, ObservableObject, NFCTagReaderSessionDelegate { @Published var tagUID = UID var session: NFCTagReaderSession? func activate() { self.session = NFCTagReaderSession(pollingOption: .iso14443, delegate: self) self.session?.alertMessage = Hold Your Phone Near the NFC Tag self.session?.begin() } func tagReaderSessionDidBecomeActive(_ session: NFCTagReaderSession) { print(Session Begun!) } func tagRea