Как использовать Core NFC с SwiftUI? - PullRequest
0 голосов
/ 29 сентября 2019

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

enter image description here

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

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")
}
...