Skip to content
This repository has been archived by the owner on Nov 11, 2021. It is now read-only.

yaakaito/Overline

Repository files navigation

Overline 0.2.0

Objective-C utilities and shorthands.

Overline is not clone of other language features. Simple and clean Objective-C.

Usage

setup with cocoapods.

pod 'Overline'

import Overline.h

#import "Overline.h"

with BlocksKit

pod 'BlocksKit'
pod 'Overline-BlocksKit'

Ignored duplicate methods: each map reduce filter reject

Features

NSArray

NSArray+Initialize

NSArray *array = [NSArray arrayWithRangeFrom:0 to:10];
// @[@0, @1, @2, @3, @4, @5, @6, @7, @8, @9]

NSArray *array2 = [NSArray arrayWithRangeFrom:0 to:-10 step:2];
// @[@0, @-2, @-4, @-6, @-8]
  • arrayWithRangeFrom:to:
  • arrayWithRangeFrom:to:step:

NSArray+Enumeration

NSArray *mapped = [@[@1,@2,@3,@4,@5,@6] mappedArrayUsingBlock:^id(id obj, NSUInteger idx) {
    if ([obj integerValue] % 2 == 0) {
        return obj;
    }
    return nil;
}];
// @[@2,@4,@6]
  • each
  • map mappedArrayUsingBlock
  • reduce reducedObjectByBlock
  • find objectUsingBlock
  • filter filteredArrayUsingBlock
  • reject rejectedArrayUsingBlock

NSArray+Random

NSArray *shuffled = [@[@1,@2,@3,@4,@5,@6] shuffledArray];
  • shuffle shuffledArray
  • anyObject

NSArray+Reverse

NSArray *reversed = [@[@1,@2,@3,@4,@5,@6] reversedArray]; 
// @[@6,@5,@4,@3,@2,@1]
  • reverse reversedArray
  • objectAtReversedIndex

NSArray+Selector

  • firstObject

NSArray+SubArray

  • subarrayFromIndex:
  • subarrayFromIndex:length:
  • subarrayToIndex:
  • uniqueObjects
  • uniqueObjectsUsingEqualsBlock

NSArray+Difference

  • difference arrayDifferenceWithArray
  • unionise arrayByUnionisingArray

NSArray+Shorthand

  • isEmpty

NSArray+Sorting

  • arraySortedDescending:
  • arraySortedAsc
  • arraySortedDesc

NSMutableArray

NSMutableArray+Shorthands

NSMutableArray *marray = [NSMutableArray arrayWithArray:@[@1,@2,@3]];
[marray insertObjects:@[@4,@5,@6] atIndex:1];
  • insertObjects:atIndex:

NSMutableArray+Sorting

  • sortDescending:
  • sortAsc
  • sortDesc

NSDate

NSDate+Components

Class Methods
  • currentWeekday
  • currentHour
  • currentMinute
  • currentSecond
  • currentDay
  • currentMonth
  • currentYear
  • commonDateComponentsForNow
  • timeComponentsForNow
Instance Methods
  • weekday
  • hour
  • minute
  • second
  • day
  • month
  • year
  • commonDateComponents
  • timeComponents

NSDictionary

NSDictionary+Selector

NSDate *date = [JSON objectForKey:@"date8601" transformBlock:^id(id obj) {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss Z"];
    return [formatter dateFromString:obj];
}];
  • objectForKey:transformBlock:
  • numberForKey:
  • stringForKey:
  • arrayForKey:
  • dictionaryForKey:
  • dateForKey:
  • dateForKey:usingFormat:
  • since1970DateForKey:
  • timestampForKey:
  • boolObjectForKey:withTrueValue:
  • boolForKey:withTureValue:
  • boolForKey:
  • intForKey:
  • integerForKey:
  • unsignedIntForKey:
  • unsignedIntegerForKey:
  • longForKey:
  • unsignedLongForKey:
  • longLongForKey:
  • unsignedLongLongForKey:
  • doubleForKey:
  • floatForKey:

NSDictionary+Enumeration

NSDictionary *dic = @{
        @"a" : @1,
        @"b" : @2,
        @"c" : @3,
        @"d" : @4
};

NSDictionary *filtered = [dic dictionaryFilteredByKeyUsingBlock:^BOOL(NSString *key) {
    return [key isEqualToString:@"a"];
}]; // @{@"a":@1}
  • each:
  • map mappedDictionaryUsingBlock
  • arrayMap mappedArrayUsingBlock
  • filterKey dictionaryFilteredByKeyUsingBlock
  • rejectKey dictionaryRejectedByKeyUsingBlock
  • filterObject dictionaryFilteredByObjectUsingBlock
  • rejectObject dictionaryRejectedByObjectUsingBlock
  • merge dictionaryByMergingDictionary
  • reduce: reducedObjectUsingBlock:memo:
  • queryString stringByFormattingQuery

NSDictionary+Path

/*
@{
    @"error" : @{
        @"message" : @"msg"
    }
}
*/
NSString *s = [dic objectForPath:@"error.message"];
  • objectForPath:

NSSet

NSSet+Enumeration

NSSet *set = [NSSet setWithArray:@[@1,@2,@3,@4,@5,@6]];
NSSet *mapped = [set mappedSetUsingBlock:^id(id obj, NSUInteger idx) {
    if ([obj integerValue] % 2 == 0) {
        return obj;
    }
    return nil;
}];
  • each
  • map mappedSetUsingBlock
  • reduce reducedObjectByBlock
  • filter filteredSetUsingBlock
  • reject rejectedSetUsingBlock

NSString

NSString+Components

[@"hoge=fuga&piyo=foo" componentsSeparatedByInnerString:@"=" andOuterString:@"&"];
/* 
@{
    @"hoge" : @"fuga",
    @"piyo" : @"foo"
};
*/
  • componentsSeparatedByInnerString:andOuterString:

NSString+RegularExpression

[@"https?" testInString:urlString];
  • rangeOfFirstMatchInString:
  • rangeOfFirstMatchInString:options:
  • matchesInString:
  • matchesInString:options:
  • testInString:
  • testInString:options:
  • replace:newString: stringByReplacingOccurrencesOfRegExpPattern:withString
  • replace:newString:options: stringByReplacingOccurrencesOfRegExpPattern:withString:options:
  • replace:template: stringByReplacingOccurrencesOfRegExpPattern:withTemplate:
  • replace:template:options: stringByReplacingOccurrencesOfRegExpPattern:withTemplate:options:

NSString+Hash

[@"hoge" md5]; // @"ea703e7aa1efda0064eaa507d9e8ab7e"
  • sha256
  • stringByHashingSha256
  • md5
  • stringByHashingMD5

NSString+URLEncode

  • URLEncode
  • stringByEncodingURL
  • URLDecode
  • stringByDecodingURL

NSString+Shorthand

  • trim
  • trim: - Trim character set in a given string

NSString+JSON

NSString *JSONString = @"{\"hoge\" : \"fuga\" }";
id json = [JSONString jsonObject];
  • JSON jsonObject

NSString+Base64Encode

[@"a" stringByEncodingBase64]; // @"YQ=="
[@"YQ==" stringByDecodingBase64]; // @"a"
  • encodeBase64 stringByEncodingBase64
  • decodeBase64 stringByDecodingBase64
  • dataUsingDecodingBase64

NSData

NSData+Base64Encode

  • base64Encode stringUsingEncodingBase64

NSURL

NSURL+Components

  • queryComponents

NSURL+Directories

NSURL *pdfURL = [NSURL URLForUserDirectoryWithAppendedPath:@"myDoc.pdf"];
NSURL *userImageFolderURL = [NSURL URLForUserDirectoryWithAppendedPath:@"images"];
  • URLForDirectory:domainMask:
  • URLForApplicationSupportDataDirectory
  • URLForApplicationSupportWithAppendedPath:
  • URLForUserDirectory
  • URLForUserDirectoryWithAppendedPath:
  • URLForDocumentDirectory;
  • URLForDocumentDirectoryWithAppendedPath:;

NSBundle

NSBundle+Shorthand

  • JSONForResourceName

NSNumber

NSNumber+Equals

[@1 isEqualToInteger:1];
  • isEqualToInt:
  • isEqualToInteger:
  • isEqualToUnsignedInt:
  • isEqualToUnsignedInteger:
  • isEqualToLong:
  • isEqualToLongLong:
  • isEqualToUnsignedLong:
  • isEqualToUnsignedLongLong:
  • isEqualToDouble:
  • isEqualToFloat:

NSDateFormatter

NSDateFormatter+Shothand

  • userDefaultFormatter
  • dateFormatterWithCalendarIndetifiter:localeIdentifiter:timeZoneAbbreviation:

NSObject

NSObject+Equals

[[NSNull null] isNullObject]; // YES
[[NSArray array] isNullObject]; // NO
  • isNullObject
  • isArray
  • isDictionary
  • isSet
  • isString
  • isNumber

NSNull

NSNull+Natural

Provide NSNull like nil

NSDictionary *dic = @{
        @"null-key" : [NSNull null]
};
[[dic objectForKey:@"null-key"] objectForKey:@"empty"]; // nil

※ This feature disable on default. Define OV_USE_NATURAL_NULL, if use this feature.

#define OV_USE_NATURAL_NULL
#import "Overline.h"

Credits

Be sure to thank these contributors:

Coding rules

  • Write tests.
  • Objective-C style naming.
    • and shorthands.