Objective-C 到 Swift:Facebook iOS API requestUserInfo 方法

Objective-C to Swift: Facebook iOS API requestUserInfo method

你好,我想弄清楚如何在 swift 中重写它:

- (IBAction)requestUserInfo:(id)sender
{
  // We will request the user's public picture and the user's birthday
  // These are the permissions we need:
  NSArray *permissionsNeeded = @[@"public_profile", @"user_birthday", @"email"];

  // Request the permissions the user currently has
  [FBRequestConnection startWithGraphPath:@"/me/permissions" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
      if (!error){
        // Parse the list of existing permissions and extract them for easier use
        NSMutableArray *currentPermissions = [[NSMutableArray alloc] init];
        NSLog(@"The fucking class is: %@", [result class]);
        NSArray *returnedPermissions = (NSArray *)[result data];
        for (NSDictionary *perm in returnedPermissions) {
          if ([[perm objectForKey:@"status"] isEqualToString:@"granted"]) {
            [currentPermissions addObject:[perm objectForKey:@"permission"]];
          }
        } // cut cut here

}

编辑:

我在尝试从 FBGraphObject 中获取所需数据时遇到了问题,但在进一步检查后我弄明白了。我在下面发布了 swift 版本,以便人们可以剪切和粘贴它并继续使用 swift。希望它可以节省一些时间。

这里:

@IBAction func requestUserInfo(sender: AnyObject){
    // These are the permissions we need:
    var permissionsNeeded = ["public_profile", "user_birthday", "email"]

    // Request the permissions the user currently has
    FBRequestConnection.startWithGraphPath("/me/permissions", completionHandler: {(connection, result, error) -> Void in

        if error == nil{
            // Parse the list of existing permissions and extract them for easier use

            var theResult = result as? [String:[AnyObject]]
            var currentPermissions = [String]()
            let returnedPermissions = theResult?["data"] as [[String:String]]

            for perm in returnedPermissions {
                if perm["status"] == "granted" {
                    currentPermissions.append(perm["permission"]!)
                }
            }

            // Build the list of requested permissions by starting with the permissions
            // needed and then removing any current permissions
            println("Needed: \(permissionsNeeded)")
            println("Current: \(currentPermissions)")

            var requestPermissions = NSMutableArray(array: permissionsNeeded, copyItems: true)
            requestPermissions.removeObjectsInArray(currentPermissions)

            println("Asking: \(requestPermissions)")

            // TODO PUT A POPUP HERE TO TELL WHAT PERMISSIONS WE NEED!

            // If we have permissions to request
            if requestPermissions.count > 0 {
                // Ask for the missing permissions
                FBSession.activeSession().requestNewReadPermissions(requestPermissions, completionHandler: {(session, error) -> Void in
                    if (error == nil) {
                        // Permission granted, we can request the user information
                        self.makeRequestForUserData()
                    } else {
                        // An error occurred, we need to handle the error
                        // Check out our error handling guide: https://developers.facebook.com/docs/ios/errors/
                        println("error: \(error?.description)")
                    }
                })
            } else {
                // Permissions are present
                // We can request the user information
                self.makeRequestForUserData()
            }

        } else {
            // An error occurred, we need to handle the error
            // Check out our error handling guide: https://developers.facebook.com/docs/ios/errors/
            println("error: \(error?.description)")
        }
    })
}

private func makeRequestForUserData() {
    FBRequestConnection.startForMeWithCompletionHandler({(connection, result, error) -> Void in
        if (error == nil) {
            // Success! Include your code to handle the results here
            println("user info: \(result)")
        } else {
            // An error occurred, we need to handle the error
            // Check out our error handling guide: https://developers.facebook.com/docs/ios/errors/
            println("error: \(error?.description)")
        }
    })
}


// Show an alert message
func showMessage(text : NSString, title : NSString){
    var alert = UIAlertController(title: title, message: text, preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
    UIApplication.sharedApplication().delegate?.window!?.rootViewController?.presentViewController(alert, animated: true, completion: nil)
}