Как использовать Core NFC со SwiftUI?

Я не могу реализовать NFCNDEFReaderSessionDelegate в SwiftUI

введите здесь описание изображения

Поэтому я создаю класс для его реализации

struct ContentView: View {

    @State var out="n/a"

    var body: some View {
        VStack{
            Text(out)
            Button(
                action:{
                    self.scan()
                },
                label:{Text("Scan")}
            )
        }
    }

    func scan(){
        var nfc=Nfc()
        nfc.start()
        out = ???
    }
}

Nfc.swift

class Nfc: NSObject, NFCNDEFReaderSessionDelegate{

    func start(){
        let session = NFCNDEFReaderSession(delegate: self, queue: nil, invalidateAfterFirstRead: true)
        session.begin()
        print("start")
    }
    func readerSession(_ session: NFCNDEFReaderSession, didInvalidateWithError error: Error) {
        print("didInvalidateWithError")
    }
    func readerSession(_ session: NFCNDEFReaderSession, didDetectNDEFs messages: [NFCNDEFMessage]) {
        print("scan")
    }
    func readerSessionDidBecomeActive(_ session: NFCNDEFReaderSession) {
        print("readerSessionDidBecomeActive")
    }
}

Я могу успешно отсканировать тег NFC, но он не вызывает обратного вызова, только показывает мне эту ошибку

[CoreNFC] 00000002 81bfda80 -[NFCNDEFReaderSession _callbackDidBecomeActive]:228  Delegate does not implement -readerSessionDidBecomeActive: method

Но я действительно реализовал этот метод.

Если я добавлю этот метод, я не смогу сканировать тег.

func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
    print("didDetect")
}

person CL So    schedule 29.09.2019    source источник
comment
Вот пример проекта на GitHub, показывающий, как использовать NFC со SwiftUI: github.com/robbiet480/TransitPal   -  person Gojir4    schedule 29.10.2019
comment
У меня точно такая же проблема. Мой код выглядит почти так же, как ваш. Вы нашли решение?   -  person krummens    schedule 11.09.2020


Ответы (1)


Вы должны создать представление, которое будет соответствовать UIViewControllerRepresentable, и представление имеет Coordinator, которое обрабатывает все функции делегирования.

person Naren    schedule 02.10.2019