检查用户是否login到iCloud? 斯威夫特/ iOS版

有没有办法让我检查一下当用户打开应用程序时是否login了iCloud? 我希望能够引导他们进入设置页面,如果他们没有login,如果他们login到iCloud,并已经使用了应用程序之前 – 我想跳过login页面….

我查看了苹果的iCloud和Cloudkits文档,但无法find任何帮助! 这甚至有可能吗?

这里你去 – 希望自我解释。 欲了解更多关于下面的NSFileManager函数的Apple文档。

func isICloudContainerAvailable()->Bool { if let currentToken = NSFileManager.defaultManager().ubiquityIdentityToken { return true } else { return false } } 

请参阅下面的摘录:表示当前用户的iCloud标识的不透明标记(只读)当iCloud当前可用时,此属性包含一个不透明的对象,表示当前用户的标识。 如果iCloud因任何原因不可用,或者没有login用户,则此属性的值为零。

如果您只想知道用户是否login到iCloud,则可以使用同步方法:

 if NSFileManager.defaultManager().ubiquityIdentityToken != nil { print("iCloud Available") } else { print("iCloud Unavailable") } 

但是,如果您想知道为什么 iCloud未启用,则可以使用asynchronous方法:

 CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStatus, error) in switch accountStatus { case .available: print("iCloud Available") case .noAccount: print("No iCloud account") case .restricted: print("iCloud restricted") case .couldNotDetermine: print("Unable to determine iCloud status") } } 

如果你想使用asynchronous方法,但不关心为什么,你应该检查accountStatusavailable ,而不是检查它不是noAccount

 CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStatus, error) in if case .available = accountStatus { print("iCloud Available") } else { print("iCloud Unavailable") } } 

请注意,这个答案是用Swift 3编写的。要在3以上的Swift版本中使用,请使用:

 CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStatus, error) in switch accountStatus { case .Available: print("iCloud Available") case .NoAccount: print("No iCloud account") case .Restricted: print("iCloud restricted") case .CouldNotDetermine: print("Unable to determine iCloud status") } } 

要么

 CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStatus, error) in if case .Available = accountStatus { print("iCloud Available") } else { print("iCloud Unavailable") } } 

我认为这个asynchronous方法是首选,所以你不检查时阻止。

  CKContainer.defaultContainer().accountStatusWithCompletionHandler { (accountStat, error) in if (accountStat == .Available) { print("iCloud is available") } else { print("iCloud is not available") } }