Takahiro Octopress Blog

-1から始める情弱プログラミング

Swiftで継承とカテゴリってどうやってやるの!?

Swiftで継承

まずはObjective-CとSwiftの継承の書き方の違いを見て行きましょう。

早速、Objective-Cの継承ですが、

1
2
3
4
5
6
7
8
// ヘッダーファイル
@interface SampleA:NSObject
// プロパティの定義
@property(strong, nonatomic) NSString *sampleString;
// メソッドの定義
- (void)sampleMethod;

@end

1
2
3
4
5
6
7
8
9
10
11
12
// モデルファイル
@interface SampleA()

@end

@implementation

- (void)sampleMethod {
  ....
}

@end

といった形で書けます。

これがSwiftだと、

1
2
3
4
5
6
7
8
9
// swiftファイル
class SampleA:NSObject {
  // プロパティの定義
  var sampleString:String = "サンプル"
  // メソッドの定義
  func sampleMethod {
      ....
  }
}

とかなりシンプルに書けますね!

Swiftでカテゴリ

次にSwiftでObjective-Cで言うカテゴリを実装してみます。

Objective-Cでは、

1
2
3
4
5
6
// ヘッダーファイル
@interface NSError(ContextBase)

- (NSError *)createError:(NSString *)message code:(NSInteger)code;

@end
1
2
3
4
5
6
7
8
9
10
11
// モデルファイル
@implementation NSError(ContextBase)

 - (NSError *)createError:(NSString *)message code:(NSInteger)code {
  NSDictionary *errorUserInfo = @{ NSLocalizedDescriptionKey:message };
  NSError *error = [[NSError alloc] initWithDomain:domain code:code userInfo:errorUserInfo];

  return error;
}

@end

と書いてきました。
これがSwiftでは、

1
2
3
4
5
6
7
8
9
// Swiftファイル
extension NSError {
  func createError(message:String!, code:Int!) -> NSError {
      let errorUserInfo = [NSLocalizedDescriptionKey: message]
      let error:NSError = NSError(domain: "jp.co.swiftSample", code: code, userInfo: errorUserInfo)

      return error
  }
}

と書けます。
う〜んこれもシンプル!!
Objective-Cで利用してきた継承はもちろんのこと、カテゴリも残っていて助かりますね!

Comments