iosswiftgame-center

How to report an achievement in Swift?


Basically I'm reporting an achievement inside of Game Center. Here is the code for doing this in Objective-C:

(void) reportAchievementIdentifier: (NSString*) identifier percentComplete: (float) percent
{
    GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier: identifier];
    if (achievement)
    {
         achievement.percentComplete = percent;
         [GKAchievement reportAchievements:@[achievement] withCompletionHandler:^(NSError *error)
         {
              if (error != nil)
              {
                  NSLog(@"Error in reporting achievements: %@", error);
              }
         }];
    }
}

Specifically I'm not sure how to complete the Completion Handler.

I tried this but I'm getting an error:

class func ReportAchievment(identifier : String, percentComplete : Double)
    {
        var achievement = GKAchievement(identifier: identifier)

        if(achievement != nil)
        {
            achievement.percentComplete = percentComplete;


            GKAchievement.reportAchievements(achievement, withCompletionHandler: { (error : NSError!) -> Void in
                println("Hello, its reported.")
            })
        }
    }

Solution

  • GKAchievement Class Reference : https://developer.apple.com/library/prerelease/ios/documentation/GameKit/Reference/GKAchievement_Ref/index.html#//apple_ref/occ/clm/GKAchievement/reportAchievements:withCompletionHandler:

    GKAchievement.reportAchievements: expect an array (not a single object) for the first parameter.

    You need to put your achievement in an array, or doing simply like so [achievement] for the first parameter :

    GKAchievement.reportAchievements([achievement], ...
    

    I haven't check your completion handler, let us know if you have any issue there too.