CoreNFC ISO7816示例?

goqiplq2  于 2022-10-23  发布在  Swift
关注(0)|答案(1)|浏览(139)

我正在寻找一个连接和阅读CoreNFC ISO7816的例子。有人能给我看一下最简单的吗?我是iOS开发人员的新手,官方文档对我没有帮助。我尝试使用NFCTagReaderSession类。其构造函数签名为

init?(pollingOption: NFCTagReaderSession.PollingOption, delegate: NFCTagReaderSessionDelegate, queue: DispatchQueue?)

NFCTagReaderSessionDelegate是一种协议,所以我为实现创建了一个类:

class NFCReaderDelegate: NSObject, NFCTagReaderSessionDelegate {
    func tagReaderSessionDidBecomeActive(_ session: NFCTagReaderSession) {}

    func tagReaderSession(_ session: NFCTagReaderSession, didInvalidateWithError error: Error) {}

    func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {
        print("got a Tag!"
        print("\(tags)")
        //let nfcTag = tags.first!
        print("connecting to Tag!")
    }
}

所以,我做了一个有趣的事

func nfc() -> Void {
let delegate = NFCReaderDelegate()
    let option = NFCTagReaderSession.PollingOption.iso14443
    let session = NFCTagReaderSession(pollingOption: option, delegate: delegate, queue: nil)
//..............

正如我所理解的,作为对标记的引用的连接的结果应该被视为调用了委托的tag ReaderSession方法,但什么都没有发生。接下来,我尝试手动调用**ession.Connect(to:)**方法。它的签名是

func connect(to: NFCTag, completionHandler: (Error?) -> Void)

但是,我在哪里可以买到NFCTag
我试图使用类似let tag: NFCTag = NFCTag.iso7816()的表达式手动声明它,但它也需要一个协议参数……所以,到目前为止,我还不能成功。我只需要一个简单的可工作的小程序。

5kgi1eie

5kgi1eie1#

委托通常不会被保留,因此,一旦函数nfc()完成,持有对变量delegate的临时引用的对象可能会被释放并且为空。
取而代之的是。使您的保持类实现NFCTagReaderSessionDelegate或仅保留委托为示例:

// Keep it here to avoid it from being deallocated
let delegate = NFCReaderDelegate()

func nfc() -> Void {
    let option = NFCTagReaderSession.PollingOption.iso14443
    let session = NFCTagReaderSession(pollingOption: option, delegate: delegate, queue: nil)
    //..............
}

相关问题