从NFC mifare标签iOS 13读取UID

时间:2019-10-08 11:23:29

标签: swift nfc ios13 ndef nfcndefreadersession

我正在尝试读取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?

                    }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

这是我实现的方式:

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