我正在寻找一个连接和阅读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()
的表达式手动声明它,但它也需要一个协议参数……所以,到目前为止,我还不能成功。我只需要一个简单的可工作的小程序。
1条答案
按热度按时间5kgi1eie1#
委托通常不会被保留,因此,一旦函数
nfc()
完成,持有对变量delegate
的临时引用的对象可能会被释放并且为空。取而代之的是。使您的保持类实现
NFCTagReaderSessionDelegate
或仅保留委托为示例: