労働生産性を向上させます。 マクロとリテラルObjective-C



みなさんこんにちは!

プログラマが少なくとも半分の時間をコードの作成に費やすことは秘密ではありません。 この時間をできるだけ短くすることは論理的です。

一度、 NSString *



コンストラクトをもう一度書いたとき、何かを変える時だと思いました。

iOS向けに開発することで、どのように人生を簡素化できますか?

この記事は、 別の記事の拡張です。







リテラル



少し前まで、Objective-cはコードの量を減らすために多数のリテラルをサポートし始めました。

すべての例は、Xcode 4.5に関連します。

そのため、次の構成を圧縮されたアナログに置き換えます。

 [NSArray arrayWithObjects:@"1", @"2", @"3", nil] => @[@"1", @"2", @"3"]; [NSDictionary dictionaryWithObjects:@"1", @"2", @"3", nil forKeys:@"one", @"two", @"three", nil] => @{@"one" : @"1", @"two" : @"2", @"three" : @"3"}
      
      





オブジェクトがnilでないことを確認してください。そうでないと例外が発生します。

続ける

 [NSNumber numberWithChar:'A'] => NSNumber *theA = @'A'; // [NSNumber numberWithInt:42] => NSNumber *fortyTwo = @42; [NSNumber numberWithUnsignedInt:42U] => NSNumber *fortyTwoUnsigned = @42U; [NSNumber numberWithLong:42L] => NSNumber *fortyTwoLong = @42L; [NSNumber numberWithLongLong:42LL] => NSNumber *fortyTwoLongLong = @42LL; //   [NSNumber numberWithFloat:3.141592654F] => NSNumber *piFloat = @3.141592654F; [NSNumber numberWithDouble:3.1415926535] => NSNumber *piDouble = @3.1415926535; // [NSNumber numberWithBool:YES] => NSNumber *yesNumber = @YES; [NSNumber numberWithBool:NO] => NSNumber *noNumber = @NO;
      
      





同様に、変数からオブジェクトを指定できます。 かっこに入れてください@()



もっと面白い!

 NSMutableArray * array = [@[@"1", @"2", @"3"] mutableCopy] ; [array objectAtIndex:0] => array[0]; array[0] = @"5"; NSMutableDictionary *dictionary = [@{@"one" : @"1", @"two" : @"2", @"three" : @"3"} mutableCopy]; NSString *key = @"one"; oldObject = dictionary[key]; dictionary[key] = newObject;
      
      





一般に、大量の構文糖。



マクロ



さまざまな方法でマクロに関連付けることができますが、開発を高速化できます。

開発に適した興味深いマクロのリストは次のとおりです。

 #define ApplicationDelegate ((MyAppDelegate *)[[UIApplication sharedApplication] delegate]) #define UserDefaults [NSUserDefaults standardUserDefaults] #define SharedApplication [UIApplication sharedApplication] #define Bundle [NSBundle mainBundle] #define MainScreen [UIScreen mainScreen] #define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES #define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO #define NetworkActivityIndicatorVisible(x) [UIApplication sharedApplication].networkActivityIndicatorVisible = x #define NavBar self.navigationController.navigationBar #define TabBar self.tabBarController.tabBar #define NavBarHeight self.navigationController.navigationBar.bounds.size.height #define TabBarHeight self.tabBarController.tabBar.bounds.size.height #define ScreenWidth [[UIScreen mainScreen] bounds].size.width #define ScreenHeight [[UIScreen mainScreen] bounds].size.height #define TouchHeightDefault 44 #define TouchHeightSmall 32 #define ViewWidth(v) v.frame.size.width #define ViewHeight(v) v.frame.size.height #define ViewX(v) v.frame.origin.x #define ViewY(v) v.frame.origin.y #define SelfViewWidth self.view.bounds.size.width #define SelfViewHeight self.view.bounds.size.height #define RectX(f) f.origin.x #define RectY(f) f.origin.y #define RectWidth(f) f.size.width #define RectHeight(f) f.size.height #define RectSetWidth(f, w) CGRectMake(RectX(f), RectY(f), w, RectHeight(f)) #define RectSetHeight(f, h) CGRectMake(RectX(f), RectY(f), RectWidth(f), h) #define RectSetX(f, x) CGRectMake(x, RectY(f), RectWidth(f), RectHeight(f)) #define RectSetY(f, y) CGRectMake(RectX(f), y, RectWidth(f), RectHeight(f)) #define RectSetSize(f, w, h) CGRectMake(RectX(f), RectY(f), w, h) #define RectSetOrigin(f, x, y) CGRectMake(x, y, RectWidth(f), RectHeight(f)) #define DATE_COMPONENTS NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit #define TIME_COMPONENTS NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit #define FlushPool(p) [p drain]; p = [[NSAutoreleasePool alloc] init] #define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0] #define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
      
      







それらを1つのヘッダーファイルに入れ、 <project_name>-Prefix.pch



ます。 その後、コードでそれらを使用します。 とても便利です。



iStyxユーザーは、このようにマクロ内のパラメーターを角括弧で囲むのが良いことに気づきました

 #define RGB(r, g, b) [UIColor colorWithRed:(r)/255.f green:(g)/255.f blue:(b)/255.f alpha:1.f]
      
      







タイプのオーバーライド



まず、星とNSプレフィックスから離れるために使用する再定義を入力します。 主なものはそれらに慣れることです。

次に例を示します。



 typedef NSString* String; typedef NSNumber* Number; typedef NSArray* Array; typedef NSMutableArray* MutableArray; typedef NSDictionary* Dictionary; typedef NSMutableDictionary* MutableDictionary;
      
      







おわりに



一般的に、表面的な習熟を実施しました。 作業を簡素化し、余分な文字を書かないでください(ただし、変数の論理名を忘れないでください!!!)



開発に頑張ってください。



PSユーザーPilot34は、 補助ツールのライブラリを共有しました。



All Articles