Open1

SwiftとObjective-C

ImaIma

SwiftとObjective-Cの基本的な文法の違いの比較

SwiftとObjective-CはどちらもiOSやmacOSの開発に使われる言語ですが、文法や特性にいくつかの違いがあります。以下に、その基本的な違いをわかりやすくまとめます。


1. 変数宣言と型推論

Objective-C:

int number = 5;
NSString *string = @"Hello, World!";

Swift:

var number = 5          // 型推論により自動的にInt型
let string = "Hello, World!"  // 型推論により自動的にString型
  • Swiftでは型推論があり、明示的に型を指定しなくても変数や定数の型が自動的に決まります。
  • varは変数(再代入可能)、letは定数(再代入不可)を宣言します。

2. ポインタの使用

Objective-C:

ポインタを明示的に使用します。

NSString *string = @"Hello";

Swift:

ポインタの概念は隠蔽されています。

var string = "Hello"
  • Swiftでは、ポインタを使わずに変数を直接扱います。

3. メソッドの呼び出しと構文

Objective-C:

[myObject doSomethingWithParameter:parameter];

Swift:

myObject.doSomething(parameter)
  • Swiftでは、ドットシンタックスと引数名を使用してメソッドを呼び出します。

4. 文字列操作

Objective-C:

NSString *greeting = [NSString stringWithFormat:@"Hello, %@", name];

Swift:

let greeting = "Hello, \(name)"
  • Swiftでは、文字列補間が可能です。

5. コレクション(配列・辞書)の宣言

Objective-C:

NSArray *array = @[@"Apple", @"Banana", @"Cherry"];
NSDictionary *dictionary = @{@"Key1": @"Value1", @"Key2": @"Value2"};

Swift:

let array = ["Apple", "Banana", "Cherry"]
let dictionary = ["Key1": "Value1", "Key2": "Value2"]
  • Swiftでは、コレクションの宣言がより簡潔です。

6. 条件文とループ

Objective-C:

if (a == b) {
    // 処理
}

for (int i = 0; i < 10; i++) {
    // 処理
}

Swift:

if a == b {
    // 処理
}

for i in 0..<10 {
    // 処理
}
  • Swiftでは、条件文やループの括弧が省略され、よりシンプルな構文になります。

7. クラスの宣言

Objective-C:

@interface MyClass : NSObject

@property (nonatomic, strong) NSString *name;

- (void)doSomething;

@end

@implementation MyClass

- (void)doSomething {
    // 処理
}

@end

Swift:

class MyClass {
    var name: String

    init(name: String) {
        self.name = name
    }

    func doSomething() {
        // 処理
    }
}
  • Swiftでは、クラスの宣言が1つのブロックで完結します。
  • プロパティメソッドの宣言が簡潔です。

8. メモリ管理

Objective-C:

  • 手動参照カウント(MRC)や自動参照カウント(ARC)を使用します。

Swift:

  • ARCが自動的に適用されます。

  • Swiftでは、開発者がメモリ管理を意識する必要が少なくなっています。


9. オプショナル

Objective-C:

  • nilを扱う際の明確な仕組みがない。

Swift:

var optionalString: String? = nil

if let unwrappedString = optionalString {
    // unwrappedStringを使用
}
  • Swiftでは、オプショナル型が導入され、nilの扱いが安全になっています。

10. 列挙型(Enum)

Objective-C:

typedef NS_ENUM(NSInteger, Direction) {
    DirectionNorth,
    DirectionSouth,
    DirectionEast,
    DirectionWest
};

Swift:

enum Direction {
    case north
    case south
    case east
    case west
}
  • Swiftの列挙型は、より強力で関連値を持つこともできます。

11. クロージャとブロック

Objective-C:

void (^completionBlock)(BOOL) = ^(BOOL success) {
    // 処理
};

Swift:

let completion: (Bool) -> Void = { success in
    // 処理
}
  • Swiftのクロージャは、シンタックスが簡潔で、トレーリングクロージャとして使用できます。

12. エラーハンドリング

Objective-C:

NSError *error = nil;
BOOL success = [self doSomethingWithError:&error];
if (!success) {
    // エラー処理
}

Swift:

do {
    try doSomething()
} catch {
    // エラー処理
}
  • Swiftでは、do-catch文を使用した明示的なエラーハンドリングが可能です。

まとめ

  • Swiftは、よりモダンで安全性の高い言語設計となっており、簡潔な文法と強力な型システムを持っています。
  • Objective-Cは、C言語の拡張であり、ポインタやマクロなどの概念が存在します。