iOSエンジニアの技術ブログ

iOSエンジニアが技術のアウトプット

Swiftと比較して学ぶObjective-C【基礎文法】

次のiOSの案件がSwiftとObjective-C

混合されたアプリだと知り、

このままだとついていけない事が想像できたので、

慣れているSwiftと比較してObjective-Cの基礎文法を学習する備忘録。

Print関数

Swift

print("ここに書いた内容がコンソールに表示")

Objective-C

NSLog(@"ここに書いた内容がコンソールに表示");

出力結果はどちらも、
ここに書いた内容がコンソールに表示
である。

比べるとSwiftがいかにシンプルかがわかる。

まとめると、、、

  • printではなく、NSLogを使う
  • 最後に;がないとコンパイラエラー発生のため必須
  • 表示させる内容の前に@をつける。@がなければコンパイルエラー

@と;の存在がめちゃやっかい。
コンパイルエラーで伝えてくれるから、慣れれば問題ないかな

初期化した値をコンソールに表示

文字列編

Swift

let name: String = "自分の名前"
print(name)

Objective-C

NSString *name = @"自分の名前";
NSLog(@"%@", name);

全然見慣れない。。。。けどまとめてみる。

  • 文末に;がある。

  → どうも、Objective-Cでは最後に;を書くのがお決まり。

  • 型を一番最初に宣言。

  → この違いの把握で、見え方が全然変わってくる

  • 型の名前はString → NSString

  → まあ理解できる

  • 宣言の文章の最初に*を書く必要がある。

  → 気持ち悪いが、コンパイルエラーがなるので慣れの問題

  • @"%@", 宣言名 でコンソールにログが出せる

  → メモリ内のデータにアクセスする場合は%@ を使用すると思っておこう

数値編

Swift

let old: Int = 23
print(old)

Objective-C

NSNumber *old = @23;
NSLog(@"%@", old);

Objective-CでInt型ではなく、NSNumberって言うのね。理解。

配列

Swift

let country: [String] = ["日本","イタリアン","フランス","アメリカ","中国"]

Objective-C

NSArray *country = @[@"日本",@"イタリアン",@"フランス",@"アメリカ",@"中国"];

配列にすると@のしつこさがより鮮明になりますねmm

for文

先ほど、配列の例をそのまま使う

Swift

let country: [String] = ["日本","イタリアン","フランス","アメリカ","中国"]

for i in country {
    print(i)
}

Objective-C

 NSArray *country = @[@"日本",@"イタリアン",@"フランス",@"アメリカ",@"中国"];
        
 for(NSString *i in country) {
       NSLog(@"%@", i)
 }

for文はSwiftをパッと見て異なる
(NSString *i in country)と()でくくるのは、まあいいとして、

注目はObjective-Cはiに対してNSString型だと宣言をしていたところだ。

試しにNSStringを消してみると、コンパイルエラーになる。つまり、必須ってことだ。

Swiftでのfor文に型を書いているコードは正直見たことがない。
ちなみに型を宣言してみると、ちゃんとコンパイルが成功する。

以下がそのコード
Swift

for i: String in country {
    print(i)
}

country の型が [String]だから、
i の型が String なのは自明なのだが、
今回Objective-Cの学習で、この自明が学べた。
ありがとう。Objective-C