Как принудительно привести и преобразовать тип данных в цель c - PullRequest
0 голосов
/ 08 апреля 2019

Я быстрый разработчик, не обладающий знанием цели c.Может ли кто-нибудь помочь мне с преобразованием приведенного ниже кода в цель C

let newVersion = Int((userInfo.value(forKey: 
"gcm.notification.version") as string).replacingOccurrences(of: ".", with: ""))
let currentVersion = Int((userDefaults.standard.value(forKey: "currentAppVersion") as string).replacingOccurrences(of: ".", with: ""))



if(newVersion > currentVersion) {
//code here
}

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Должно делать что-то вроде следующего:

NSDictionary *userInfo; // Assuming this is a dictionary
NSString *newVersionString = userInfo[@"gcm.notification.version"];
newVersionString = [newVersionString stringByReplacingOccurrencesOfString:@"." withString:@""];
NSInteger newVersion = [[[NSDecimalNumber alloc] initWithString:newVersionString] integerValue];

NSString *currentVersionString = [[NSUserDefaults standardUserDefaults] valueForKey:@"currentAppVersion"];
currentVersionString = [currentVersionString stringByReplacingOccurrencesOfString:@"." withString:@""];
NSInteger currentVersion = [[[NSDecimalNumber alloc] initWithString:currentVersionString] integerValue];

if(newVersion > currentVersion) {
    //code here
}

Но это не то, как вы сравниваете версии.Проблема в том, что, например, 1.11.1 равно 11.1.1.Или, другими словами, в любом случае переставьте точки, но если количество цифр и их порядок не изменятся, вы обнаружите, что это та же версия.Вы должны сделать это для каждого компонента (как в Swift, так и в Objective-C):

NSDictionary *userInfo;
NSArray<NSString *> *newComponents = [userInfo[@"gcm.notification.version"] componentsSeparatedByString:@"."];

NSString *currentVersionString = [[NSUserDefaults standardUserDefaults] valueForKey:@"currentAppVersion"];
NSArray<NSString *> *currentComponents = [currentVersionString componentsSeparatedByString:@"."];

BOOL newVersionIsGreater = NO;
if(newComponents.count != currentComponents.count) newVersionIsGreater = newComponents.count > currentComponents.count;
else {
    for(int i=0; i<newComponents.count; i++) {
        NSInteger newInteger = [[[NSDecimalNumber alloc] initWithString:newComponents[i]] integerValue];
        NSInteger currentInteger = [[[NSDecimalNumber alloc] initWithString:currentComponents[i]] integerValue];
        if(newInteger != currentInteger) {
            newVersionIsGreater = newInteger > currentInteger;
            break;
        }
    }
}

if(newVersionIsGreater) {
    //code here
}

Теперь он проверяет, есть ли у нас одинаковое количество компонентов в обоих случаях, а затем выполняет итерацию по ним.Первый компонент, который отличается, сообщит об изменении.

0 голосов
/ 08 апреля 2019
    NSString *newVersion = [(NSString *)[notification.userInfo valueForKey:@"gcm.notification.version"] stringByReplacingOccurrencesOfString:@"." withString:@""];
    NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
    NSString *oldVersion = [(NSString *)[standardDefaults valueForKey:@"currentAppVersion"] stringByReplacingOccurrencesOfString:@"." withString:@""];

    if ([newVersion integerValue] > [oldVersion integerValue]){
        //code here
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...