【问题标题】:Read UID from NFC mifare tag iOS 13从 NFC mifare 标签 iOS 13 读取 UID
【发布时间】:2020-02-05 16:27:55
【问题描述】:

我正在尝试读取 mifare 标签的 UID。

看例子,经常看到下面的方法:

func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag]) {      
  if case let NFCTag.miFare(tag) = tags.first! {
    print(tag.identifier as NSData)
  }
}

但是,当把它放到我的项目中时,该方法没有被调用。

我还注意到 xCode 发出警告说这几乎与可选协议匹配,除了它使用 NFCNDEFTag 而不是 NFCTag..

当我尝试更新时,确实会调用该方法。但是后来我在尝试将标签定义为该方法中的 mifare 时遇到了麻烦。我收到错误“模式无法匹配“NFCNDEFtag”类型的值。

代码如下:

    @available(iOS 13.0, *)
    func readerSession(_ session: NFCNDEFReaderSession, didDetect tags: [NFCNDEFTag]) {
        print("in did detect tags")

        let tag = tags.first!

        session.connect(to: tag) { (error: Error?) in


            session.connect(to: tag) { (error: Error?) in
                   if case let .mifare(mifareTag) = tag {
                       // can access tag identifier here?

                    }
            }
        }
    }

【问题讨论】:

    标签: swift nfc ios13 ndef


    【解决方案1】:

    这就是我实现它的方式:

    func tagReaderSession(_ session: NFCTagReaderSession, didDetect tags: [NFCTag] {
        let tag = tags.first!
        readerSession?.connect(to: tag, completionHandler: { error in
            if case let .miFare(miFare) = tag {
                var byteData = [UInt8]()
                miFare.identifier.withUnsafeBytes { byteData.append(contentsOf: $0) }
                var uid = "0"
                byteData.forEach {
                    uid.append(String($0, radix: 16))
                }
                print("UID: \(uid)")
            }
        })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      相关资源
      最近更新 更多