Swift 3.1 SKCloudServiceCapability 问题

Swift 3.1 Issue with SKCloudServiceCapability

我正在尝试调用此函数来检查 Apple Music 订阅状态​​。我有一个活跃的订阅并在我的 iPhone 上听音乐。 但是当我在上面 运行 测试应用程序时,capability 值无效。

应该是SKCloudServiceCapability.musicCatalogPlaybackSKCloudServiceCapability.addToCloudMusicLibrary,或者不设置。我只能得到raw value = 257.

func appleMusicCheckIfDeviceCanPlayback()
{
    let serviceController = SKCloudServiceController()
    serviceController.requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in
        switch capability {
        case SKCloudServiceCapability.musicCatalogPlayback:
            print("The user has an Apple Music subscription and can playback music!")
        case SKCloudServiceCapability.addToCloudMusicLibrary:
            print("The user has an Apple Music subscription, can playback music AND can add to the Cloud Music Library")
        case []:
            print("The user doesn't have an Apple Music subscription available. Now would be a good time to prompt them to buy one?")
        default: print("Something went wrong")
        }
    }
}


这是怎么回事?

最后 Apple 论坛的人给了我这个 link 文档,我找到了问题所在。 https://developer.apple.com/library/content/qa/qa1929/_index.html

我应该使用 if capability.contains(SKCloudServiceCapability.) 而不是 switch 来获取功能值。 所以这段代码工作得很好。

func appleMusicCheckIfDeviceCanPlayback()  
{  
    let serviceController = SKCloudServiceController()  
    serviceController.requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in  
        if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) {  
            print("The user has an Apple Music subscription and can playback music!")  

        } else if  capability.contains(SKCloudServiceCapability.addToCloudMusicLibrary) {  
            print("The user has an Apple Music subscription, can playback music AND can add to the Cloud Music Library")  

        } else {  
            print("The user doesn't have an Apple Music subscription available. Now would be a good time to prompt them to buy one?")  

        }  
    }  
}  

是位运算

.musicCatalogPlayback(1 << 0 = 1) | . addToCloudMusicLibrary(1 << 8 = 256) = 257

使用

swift:

case SKCloudServiceCapability.addToCloudMusicLibrary|SKCloudServiceCapability.musicCatalogPlayback:{
    //code
}break;

oc:

case SKCloudServiceCapabilityAddToCloudMusicLibrary|SKCloudServiceCapabilityMusicCatalogPlayback:{
            //code
        }break;