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で利用してきた継承はもちろんのこと、カテゴリも残っていて助かりますね!