Итак, я перевожу проект в Swift 5.1 с цели C. В настоящее время у меня есть фрагмент кода, который следующий, уже в Swift:
func getStoryDetail(with jsonDict: inout [AnyHashable : Any] , success: NetworkManagerSuccess, failure: NetworkManagerFailure) {
manager?.post("CUSTOM_API_URL", parameters: jsonDict, progress: nil, success: { operation, responseObject in
if let responseObject = responseObject {
print("\(responseObject)")
}
//success(responseObject)
}, failure: { operation, error in
print("\n\nFailed: Error:\n: \(error)")
//failure(error)
})
}
И я вызываю эту функцию в Objective C, используя заголовок моста:
NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
[jsonDict setValue:[NSString stringWithFormat:@"%d", pageNumber] forKey:kPage];
[jsonDict setValue:storyId forKey:kStoryId];
[[StoryService sharedManager] getStoryDetailWith:jsonDict success:^(id responseObject) {
[SVProgressHUD dismiss];
isLoading = NO;
if (![responseObject isEqual:[NSNull null]]) {
NSString *responseCode = [responseObject objectForKey:@"ResponseCode"];
if ([responseCode isEqualToString:@"1"]) {
NSMutableArray *arrNewList = [[responseObject objectForKey:@"Result"] mutableCopy];
if (arrNewList.count == 0) {
shouldLoadMore = NO;
} else {
if (pageNumber == 1) {
arrayStoryConversation = arrNewList;
[self loadNextMessage];
} else {
[arrayStoryConversation addObjectsFromArray:arrNewList];
}
pageNumber++;
shouldLoadMore = YES;
if (arrayStoryConversation.count == [[responseObject objectForKey:@"TotalCount"] intValue]) {
shouldLoadMore = NO;
}
}
if ([responseObject objectForKey:@"Next_result"]) {
_nextStory = [responseObject objectForKey:@"Next_result"];
}
} else {
shouldLoadMore = NO;
[self showALertViewWithTitle:@"Oops!" withText:[responseObject objectForKey:@"ResponseMessage"] andButtonText:@"Ok"];
}
intTotalLikes = [[responseObject objectForKey:klike_count] intValue];
intTotalComment = [[responseObject objectForKey:kcomment_Count] intValue];
if ([[responseObject objectForKey:kUserlike] isEqualToString:@"1"]) {
isFavStory = YES;
} else {
isFavStory = NO;
}
[self.tblStory reloadData];
} else {
[self getConversationList:showLoader];
}
} failure:^(NSError *error) {
isLoading = NO;
[SVProgressHUD dismiss];
NSString *message;
BOOL showCancelButton = YES;
if (error.code == NSURLErrorTimedOut) {
showCancelButton = NO;
message = @"Request time out.";
} else if (error.code == NSURLErrorNotConnectedToInternet || error.code == NSURLErrorCannotConnectToHost || error.code == NSURLErrorNetworkConnectionLost) {
showCancelButton = NO;
message = @"Internet connection goes down.";
} else if (error.code == NSURLErrorBadServerResponse) {
showCancelButton = YES;
message = @"Any technical problem on server side.";
} else {
showCancelButton = NO;
message = @"Request couldn't be completed.";
}
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Failed" message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *actionTryAgain = [UIAlertAction actionWithTitle:@"Try Again" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
[self getConversationList:showLoader];
}];
[alertController addAction:actionTryAgain];
if (showCancelButton) {
UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
}];
[alertController addAction:actionCancel];
}
[self presentViewController:alertController animated:YES completion:nil];
}];
Я получаю следующую ошибку: Нет видимого @interface для 'StoryService', объявляется селектор 'getStoryDetailWith: success: fail:' * . Затем, посмотрев, я понял, что это связано с функцией SWIFT, имеющей «inout», которая явно не совместима с Objective C. Я попытался добавить UnsafeMutablePointer<Anyhashble>
, но он тоже не работает.
Кто-нибудь может мне помочь решить это, пожалуйста? Я действительно застрял.
Спасибо!