Thjesht duhet të përktheni atë që Parse ju tregon tashmë në tutorialin e tyre të quajtur "AnyPic", ata zbatojnë dhe zbatojnë sistemin "like buton" të votimit lart/poshtë në ObjC, këtu është elementi kryesor i përkthyer në Swift që do t'ju duhet të importoni PAPCache.h/m PAPConstants. h/m dhe PAPUtility.h/m në projektin tuaj dhe ndërtoni një titull lidhës për t'u lidhur me këta skedarë. Nga atje, e vetmja pjesë që duhet të kuptoni është se si të modifikoni kodin e mëposhtëm për t'iu përshtatur nevojave tuaja, por kjo tashmë po funksionon, thjesht duhet të riorganizoni variablat dhe t'i ndryshoni gjërat në Opsionale ose JO-opsionale për ta bërë këtë të funksionojë për ty. Unë do të supozoja se kjo metodë është metoda MË TË MIRË pasi Parse e përdor vetë këtë metodë në tutorialin e tyre të ObjC BIG për të treguar gjithçka që është aplikacioni "AnyPic", do t'ju duhet të deklaroni një pronë në UIVIewController të llojit PFObject dhe më shumë. , por kjo është thelbi i kodit. Askush nuk do t'ju japë kodin e plotë pasi kjo do të marrë shumë kode dhe do të ishte më e lehtë nëse do ta bënit këtë në Swift në vend që të keni nevojë të bëni atë që sapo bëra në 30 minutat e fundit. Kalimi i kësaj për të përputhur me kodin ObjC do të jetë i mundimshëm, por kjo është mënyra se si bëhet. Paç fat!
Çfarë duhet të deklaroni, të paktën:
var likeUsers : NSArray?
var likeButton: UIButton?
var someObject: PFObject?
Metoda:
func didTapLikeButtonAction(button: UIButton) {
var liked = Bool()
liked = !button.selected
button.removeTarget(self, action: "didTapLikeButtonAction(button)", forControlEvents: UIControlEvents.TouchUpInside)
var originalLikeUsersArray = NSArray()
originalLikeUsersArray = self.likeUsers!
var newLikeUsersSet = NSMutableSet(capacity: self.likeUsers!.count)
for id in self.likeUsers! {
if id.objectId != PFUser.currentUser()?.objectId {
newLikeUsersSet.addObject(id)
}
}
if liked {
PAPCache.sharedCache().incrementLikerCountForPhoto(self.someObject)
newLikeUsersSet.addObject(PFUser.currentUser()!)
} else {
PAPCache.sharedCache().decrementLikerCountForPhoto(self.someObject)
}
PAPCache.sharedCache().setPhotoIsLikedByCurrentUser(self.someObject, liked: liked)
likeUsers = newLikeUsersSet.allObjects
if liked {
PAPUtility.likePhotoInBackground(self.someObject, block: {(success: Bool, error: NSError?) -> Void in
if !success {
button.addTarget(self, action: "didTapLikeButtonAction(button)", forControlEvents:UIControlEvents.TouchUpInside)
self.likeUsers = originalLikeUsersArray
self.setLikeButtonState(true)
}
})
} else {
PAPUtility.unlikePhotoInBackground(self.someObject, block: {(success: Bool, error: NSError?) -> Void in
if !success {
button.addTarget(self, action: "didTapLikeButtonAction(button)", forControlEvents:UIControlEvents.TouchUpInside)
self.likeUsers = originalLikeUsersArray
self.setLikeButtonState(false)
}
})
}
}
LikeButtonFunction përkthyer nga ObjC
func setLikeButtonState(selected: Bool) {
if selected {
likeButton?.titleEdgeInsets = UIEdgeInsetsMake( -1.0, 0.0, 0.0, 0.0)
} else {
likeButton?.titleEdgeInsets = UIEdgeInsetsMake( 0.0, 0.0, 0.0, 0.0)
}
likeButton?.selected = selected
}
Ju do të duhet të shkarkoni projektin "Anypic" nga këtu:
https://parse.com/tutorials/anypic
dhe do t'ju duhet të importoni në projektin tuaj Swift, minimalisht, sa vijon:
#import "PAPCache.h"
#import "PAPConstants.h"
#import "PAPUtility.h"
Më pas do t'ju duhet të rikodoni PAPCache, PAPUtility dhe PAPConstants për t'iu përshtatur nevojave tuaja. Fat i mirë, ky do të jetë shumë kodim për shkak të Swift, por mund të jetë pothuajse pa kodim nëse do të përdorni ObjC siç Parse ka thënë vazhdimisht se ata nuk do të bëjnë një shtytje të madhe në Swift derisa të testohet në betejë. Herën e fundit që ata e thanë këtë përsëri ishte vetëm dy muaj më parë në qershor.
Kodi origjinal, nga Objective-C, ka disa gjëra që nuk i kam bërë për ju pasi ky është aplikacioni JUAJ dhe do të duhet t'i bëni vetë këto gjëra nëse e shihni të nevojshme, përsëri, kodi ObjC është kryer, por ju zgjodhët për të përdorur Swift, kështu që rikodimi i asaj që tashmë është dhënë në thelb, "jashtë kutisë" është ajo me të cilën do të duhet të merreni:
- (void)didTapLikePhotoButtonAction:(UIButton *)button {
BOOL liked = !button.selected;
[button removeTarget:self action:@selector(didTapLikePhotoButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self setLikeButtonState:liked];
NSArray *originalLikeUsersArray = [NSArray arrayWithArray:self.likeUsers];
NSMutableSet *newLikeUsersSet = [NSMutableSet setWithCapacity:[self.likeUsers count]];
for (PFUser *likeUser in self.likeUsers) {
if (![[likeUser objectId] isEqualToString:[[PFUser currentUser] objectId]]) {
[newLikeUsersSet addObject:likeUser];
}
}
if (liked) {
[[PAPCache sharedCache] incrementLikerCountForPhoto:self.photo];
[newLikeUsersSet addObject:[PFUser currentUser]];
} else {
[[PAPCache sharedCache] decrementLikerCountForPhoto:self.photo];
}
[[PAPCache sharedCache] setPhotoIsLikedByCurrentUser:self.photo liked:liked];
[self setLikeUsers:[newLikeUsersSet allObjects]];
if (liked) {
[PAPUtility likePhotoInBackground:self.photo block:^(BOOL succeeded, NSError *error) {
if (!succeeded) {
[button addTarget:self action:@selector(didTapLikePhotoButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self setLikeUsers:originalLikeUsersArray];
[self setLikeButtonState:NO];
}
}];
} else {
[PAPUtility unlikePhotoInBackground:self.photo block:^(BOOL succeeded, NSError *error) {
if (!succeeded) {
[button addTarget:self action:@selector(didTapLikePhotoButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self setLikeUsers:originalLikeUsersArray];
[self setLikeButtonState:YES];
}
}];
}
[[NSNotificationCenter defaultCenter] postNotificationName:PAPPhotoDetailsViewControllerUserLikedUnlikedPhotoNotification object:self.photo userInfo:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:liked] forKey:PAPPhotoDetailsViewControllerUserLikedUnlikedPhotoNotificationUserInfoLikedKey]];
}
- (void)didTapLikerButtonAction:(UIButton *)button {
PFUser *user = [self.likeUsers objectAtIndex:button.tag];
if (delegate && [delegate respondsToSelector:@selector(photoDetailsHeaderView:didTapUserButton:user:)]) {
[delegate photoDetailsHeaderView:self didTapUserButton:button user:user];
}
}
- (void)didTapUserNameButtonAction:(UIButton *)button {
if (delegate && [delegate respondsToSelector:@selector(photoDetailsHeaderView:didTapUserButton:user:)]) {
[delegate photoDetailsHeaderView:self didTapUserButton:button user:self.photographer];
}
}
Kodi ObjC nga lart vjen nga skedari "PAPPhotoDetailsHeaderView.m" i depove të Parse.com AnyPic github dhe ju mund të shihni tutorialin e tyre OBJECTIVE-C për këtë në faqen e tyre të internetit në faqen e internetit që kam renditur më sipër.
Dhe, meqë ra fjala, kjo funksionon për mua, dhe përpilohet për mua, por unë nuk përdor Swift, kështu që kjo është e kotë për mua, por nëse i vendosni gjërat si duhet, nuk keni nevojë të ngatërroni me PAPCache, PAPConstants dhe PAPutility. Por kjo supozon se ju jeni të përgatitur mirë në të gjitha gjërat Parse. Gjithsesi, fat të mirë.
Sapo shtova funksionin likeButtonOn/Off, përkthyer nga ObjC
23.08.2015