Swift3 Can';不能比较Swift 3中的任何哈希值

Swift3 Can';不能比较Swift 3中的任何哈希值,swift3,Swift3,我有一个由XCDYoutubeKit pod在swift项目中返回的一系列词汇: print(video?.streamURLs ?? "nothing to print") [AnyHashable(17): https://r7---sn-8vv-cg0l.googlevideo.com/videoplayback?source=youtube&pcm2cms=yes&pl=20&mv=m&initcwndbps=2522500&ipbits=0&

我有一个由XCDYoutubeKit pod在swift项目中返回的一系列词汇:

print(video?.streamURLs ?? "nothing to print")


[AnyHashable(17): https://r7---sn-8vv-cg0l.googlevideo.com/videoplayback?source=youtube&pcm2cms=yes&pl=20&mv=m&initcwndbps=2522500&ipbits=0&ms=au&key=yt6&signature=373890DBE71537EB460B6D5E0C6D6B11066DAAC7.6E0898B1C97F6504432B4A2E96511203B86AFF89&mime=video%2F3gpp&ip=212.68.230.6&dur=275.388&id=o-AALDaM6KxpA6-UX-Zfhcy0MYtZSEWxj3HGfu-aPvZR5z&upn=Wolarcf9l8k&mt=1478956785&mn=sn-8vv-cg0l&itag=17&requiressl=yes&expire=1478978548&lmt=1394298238781402&mm=31&sparams=dur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpcm2cms%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&ratebypass=yes, AnyHashable(135): https://r7---sn-8vv-cg0l.googlevideo.com/videoplayback?pl=20&initcwndbps=2522500&ipbits=0&key=yt6&ip=212.68.230.6&upn=IqqzaXYA2Ag&expire=1478978548&lmt=1458192852355410&mm=31&clen=26845311&source=youtube&pcm2cms=yes&mv=m&mt=1478956785&ms=au&mn=sn-8vv-cg0l&mime=video%2Fmp4&gir=yes&dur=275.008&id=o-AALDaM6KxpA6-UX-Zfhcy0MYtZSEWxj3HGfu-aPvZR5z&signature=86328F117AEF617380C2EE4C0327891683F8571A.C57F883610B44498FEBDF556868860687223BDF2&itag=135&requiressl=yes&sparams=clen%2Cdur%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpcm2cms%2Cpl%2Crequiressl%2Csource%2Cupn%2Cexpire&ratebypass=yes]
我试着比较钥匙,但我被一些看起来很简单的东西卡住了。。。我所尝试的:

                for item in (video?.streamURLs)! {

                if item.key == AnyHashable(UInt(17)) {
                    //never pass here
                    print(item.key)
                }
            }
我不熟悉新的AnyHashable类型,但据我所知,它应该允许==运算符。


任何帮助都将不胜感激,谢谢

这是任何hashable中的一个bug,:

@0xced看起来该bug位于任何可哈希的位置。如果可以将您的字典键入NSDictionary,这可能会解决问题

您必须使用Swift 3显式使用NSNumber访问streamURLs字典中的值

struct YouTubeVideoQuality {
    static let hd720 = NSNumber(value: XCDYouTubeVideoQuality.HD720.rawValue)
    static let medium360 = NSNumber(value: XCDYouTubeVideoQuality.medium360.rawValue)
    static let small240 = NSNumber(value: XCDYouTubeVideoQuality.small240.rawValue)
}

func playVideo(videoIdentifier: String?) {
    let playerViewController = AVPlayerViewController()
    self.present(playerViewController, animated: true, completion: nil)

    XCDYouTubeClient.default().getVideoWithIdentifier(videoIdentifier) { [weak playerViewController] (video: XCDYouTubeVideo?, error: Error?) in
        if let streamURLs = video?.streamURLs, let streamURL = (streamURLs[XCDYouTubeVideoQualityHTTPLiveStreaming] ?? streamURLs[YouTubeVideoQuality.hd720] ?? streamURLs[YouTubeVideoQuality.medium360] ?? streamURLs[YouTubeVideoQuality.small240]) {
            playerViewController?.player = AVPlayer(url: streamURL)
        } else {
            self.dismiss(animated: true, completion: nil)
        }
    }
}

您是否收到编译时错误、运行时错误或代码没有产生预期的结果?
Int
符合
AnyHashable
,为什么不干脆
[17:https:…
--
if item.key==17
?将字典声明为
[Int:String]
[Int:URL]
@vadian如果item.key==17给我一个编译错误:二进制运算符“==”不能应用于“AnyHashable”和“Int”类型的操作数@luk2302没有错误,只是没有在两个明显相等的AnyHashable(17)之间验证该条件values@nelsballs您能告诉我们打印的是什么吗(类型:item.key.base))outputs?我猜包装的类型不是
UInt