| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- //
- // NSString+KeyPaths.m
- // TBTweakViewController
- //
- // Created by Tanner on 3/26/17.
- // Copyright © 2017 Tanner Bennett. All rights reserved.
- //
- #import "NSString+KeyPaths.h"
- @interface NSMutableString (Replacement)
- - (void)replaceOccurencesOfString:(NSString *)string with:(NSString *)replacement;
- - (void)removeLastKeyPathComponent;
- @end
- @implementation NSMutableString (Replacement)
- - (void)replaceOccurencesOfString:(NSString *)string with:(NSString *)replacement {
- [self replaceOccurrencesOfString:string withString:replacement options:0 range:NSMakeRange(0, self.length)];
- }
- - (void)removeLastKeyPathComponent {
- if (![self containsString:@"."]) {
- [self deleteCharactersInRange:NSMakeRange(0, self.length)];
- return;
- }
- BOOL putEscapesBack = NO;
- if ([self containsString:@"\\."]) {
- [self replaceOccurencesOfString:@"\\." with:@"\\~"];
- // Case like "UIKit\.framework"
- if (![self containsString:@"."]) {
- [self deleteCharactersInRange:NSMakeRange(0, self.length)];
- return;
- }
- putEscapesBack = YES;
- }
- // Case like "Bund" or "Bundle.cla"
- if (![self hasSuffix:@"."]) {
- NSUInteger len = self.pathExtension.length;
- [self deleteCharactersInRange:NSMakeRange(self.length-len, len)];
- }
- if (putEscapesBack) {
- [self replaceOccurencesOfString:@"\\~" with:@"\\."];
- }
- }
- @end
- @implementation NSString (KeyPaths)
- - (NSString *)stringByRemovingLastKeyPathComponent {
- if (![self containsString:@"."]) {
- return @"";
- }
- NSMutableString *mself = self.mutableCopy;
- [mself removeLastKeyPathComponent];
- return mself;
- }
- - (NSString *)stringByReplacingLastKeyPathComponent:(NSString *)replacement {
- // replacement should not have any escaped '.' in it,
- // so we escape all '.'
- if ([replacement containsString:@"."]) {
- replacement = [replacement stringByReplacingOccurrencesOfString:@"." withString:@"\\."];
- }
- // Case like "Foo"
- if (![self containsString:@"."]) {
- return [replacement stringByAppendingString:@"."];
- }
- NSMutableString *mself = self.mutableCopy;
- [mself removeLastKeyPathComponent];
- [mself appendString:replacement];
- [mself appendString:@"."];
- return mself;
- }
- @end
|