PropertyListSerialization для настраиваемого диапазона в Swift - PullRequest
0 голосов
/ 17 июня 2019

Я хочу сериализовать некоторые данные перед их сохранением в файл plist. У меня есть решение, доступное в Objective C, но мне нужно эквивалентное решение в быстром. Поскольку я не увлекаюсь быстрой работой, я борюсь за то, чтобы преобразовать этот код в быстрые. Может ли кто-нибудь помочь мне преобразовать этот код или получить эквивалентное решение в swift?

- (NSString *) base64plistEncoding 
{
    NSData *plist = [NSPropertyListSerialization dataWithPropertyList:self format:NSPropertyListXMLFormat_v1_0 options:0 error:NULL];
    NSRange fullRange = NSMakeRange(0, [plist length]);
    NSRange startRange = [plist rangeOfData:[@"<data>" dataUsingEncoding:NSASCIIStringEncoding] options:0 range:fullRange];
    NSRange endRange = [plist rangeOfData:[@"</data>" dataUsingEncoding:NSASCIIStringEncoding] options:NSDataSearchBackwards range:fullRange];
    if (startRange.location == NSNotFound || endRange.location == NSNotFound)
        return nil;

    NSUInteger base64Location = startRange.location + startRange.length;
    NSUInteger base64length = endRange.location - base64Location;
    NSData *base64Data = [NSData dataWithBytesNoCopy:(void *)((uintptr_t)base64Location + (uintptr_t)[plist bytes]) length:base64length freeWhenDone:NO];

    NSString *base64Encoding = [[NSString alloc] initWithData:base64Data encoding:NSASCIIStringEncoding];
    base64Encoding = [base64Encoding stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    base64Encoding = [base64Encoding stringByReplacingOccurrencesOfString:@"\n" withString:@""];

    return base64Encoding;
}
...