Swift と Objective-Cの違い

ずっとObjective-Cで開発をしてましたが、やっとSwiftデビューしました。

そんな私が、SwiftとObjective-Cって違うなと思ったことをメモしておきます。

確認環境:Xcode 7.3

・ファイル構成

Objective-CはC、C++と同様にヘッダーファイル(.hファイル)とソースファイル(.cファイル)で構成されますが、

Swiftはヘッダーファイル(.hファイル)とソースファイル(.cファイル)に分かれていません。

(.swiftファイル)のみで構成されます。

・文末のセミコロン

Objective-Cは文末にセミコロンが必要ですが、

Swiftは文末にセミコロンがなくても良いです。

・変数の型宣言

Objective-Cは変数に対して、int とか NSString とか NSMutableArray とか型を明示的に宣言しますが、

Swiftは明示的に宣言しなくても良いです。その場合、コンパイラが適切な型を割り当てます。

もちろん、Swiftは明示的に型を宣言することもできます。

・オプショナル型

Swiftでは、基本的には変数や定数にnilの代入できない。

これを許可する特別なオプショナル型という型が用意されている。

・repeat-while文

Objective-Cのdo-while文が、

Swiftでは、repeat-while文と記述します。

・switch-case文

Objective-Cではswitch-case文のcaseの中にbreakを記述しますが、

Swiftでは、caseの中にbreakの記述をしなくても良い。

・デバッグ関数

Objective-CではNSLogでデバッグエリアのアウトプットウィンドウに表示しますが、

Swiftでは、printでデバッグエリアのアウトプットウィンドウに表示します。

Open Weather Map Web APIを使ってiPhoneアプリ作成

 

Open Weather Mapが提供しているWeb APIを使ってiPhoneアプリ作成してみました。

Web APIの使い方をメモしておきます。

 

確認環境:Xcode 7.3

 

有名どころのコンテンツ各社が提供しているWeb APIを活用すれば、アプリ開発の際、自分で何から何まで全部作る必要がなくなり、

さらに、Web APIを提供しているコンテンツの洗練されたノウハウを取り入れることもできます。

 

今回は、Open Weather Mapが提供している気象情報のWeb APIを使ってiPhoneアプリ作成してみます。

 

まず、はじめに、以下の Open Weather Mapのサイトにアクセスして、Sign Up をします。

 

Sign Up が完了したら、Sign Inしてください。

その後、「API」をクリックします。以下のような画面が表示されます。


Tip_01_01_009a

 

今回は、Current weather data の Subscribe を選択します。

FreeプランでAPI key を取得します。


Tip_01_01_009b

 

API Key が作成されたこと確認します。

このAPI Keyは後から使います。


Tip_01_01_009c

 

次は、Xcodeでコードを書いていきます。

Single View Applicationでプロジェクトを新規作成します。

 

プロジェクトを新規作成したら、SBJsonフレームワークをプロジェクトに取り込みます。

GitHubで公開されているものの最新版はv4.0.0ですが、

うまく使いこなせなかったので、今回はv3.2.0を使います。

Downloads の Source code (Zip)をクリックして、ダウンロードします。


Tip_01_01_009d

 

ダウンロードしたZipファイルを適当な場所で解凍します。

解凍したら、Classesフォルダのファイルを全て、Xcodeのプロジェクトにコピーします。

ルート階層に「json320」という名前でグループ(フォルダ)を作って、そこに放り込みます。


Tip_01_01_009e

 

次はStoryboardの設定をします。

Storyboardのど真ん中にラベルを1つだけ配置します。

 

このラベルを ViewController.h に「label1」という名前でアウトレットしておきます。

あとは、先ほどプロジェクトに取り込んだ、SBJsonフレームワークが使えるように、

「#import "SBJson.h"」を追加しておきます。


Tip_01_01_009f

 

最後に ViewController.m に以下のコードを書きます。

12行目の★★★の箇所には、先ほど取得した、自分のAPI Keyを記述します。

実行すると、こんな感じにラベルに東京の現在の天気が表示されます。


Tip_01_01_009g

今回はリクエストデータで東京の現在の天気としていますが、

上記のソースコードの12行目を変更すれば、名古屋や大阪などの天気を表示することもできます。

このようなリクエストデータやレスポンスデータの仕様は、以下に書かれています。

 

このようにWeb APIをうまく使えば、楽してリッチなコンテンツの作成ができます。

Web APIってほんとすごいし、おもしろいですね。

 

@propertyの属性 strong と weak

よくよく考えると?だった、@propertyの属性の「strong」と「weak」について

あっちこっちの資料を調べた結果、一応、こういうことなんじゃないかということを整理してみました。

間違っていたら、ごめんなさい。

確認環境:Xcode 7.2

まずは、動かして確認しましょう。

strong属性の「strongProperty」weak属性の「weakProperty」という2つのプロパティを持つ

「TESTClass001」クラスのクラスインターフェースを定義します。

なお、@propertyの属性は特に何も指定しなければ、「strong」になります。

"@propertyの属性 strong と weak" の続きを読む

delegate と protocol

View ControllerとTable Viewを例にして、

「delegate」と「protocol」について整理してみました。

確認環境:Xcode 7.2

ユーザーは、テーブルビューのセルをタップしたり、スクロールしたりします。

この時に発生したイベントのいくつかを、テーブルビューが処理するのではなく、

ビューコントローラーに処理を任せます。

このことを、デリゲート(delegate)と言います。

"delegate と protocol" の続きを読む

@propertyの属性 atomic と nonatomic

@propertyの属性の「atomic」と「nonatomic」について整理してみました。

確認環境:Xcode 7.2

Appleの文書には、「atomic」プロパティについて、以下のように記載されています。

なお、@propertyの属性は特に何も指定しなければ、「atomic」になります。

参考文書:

Objective-Cによるプログラミング

自動生成されたアクセサは、異なるスレッドからいくつか同時に呼び出したとしても、完全な形で値を取得/設定できる。

注意: プロパティのアトミック性は、スレッドセーフであるかどうかとは別の概念です。

あるスレッドが、アトミックなアクセサを使って、XYZPersonオブジェクトの姓と名前を変更する、

という状況を考えてみましょう。

同時に別のスレッドが姓と名前を取得しようとすれば、アトミックなゲッタは(クラッシュすることなく)完全な文字列を返しますが、

それが正しい組み合わせである保証はありません。

変更前に姓にアクセスし、変更後に名前にアクセスすると、

正しく対応していない氏名が得られることになるのです。

"@propertyの属性 atomic と nonatomic" の続きを読む

@synthesizeとは

@synthesizeで、オブジェクトのプロパティのインスタンス変数の名前を変更できます。

検証してみました。

確認環境:Xcode 7.2

こんな感じで「TESTClass001」クラスを作成します。

「someProperty」というプロパティと「someMethod」というメソッドを作成します。

"@synthesizeとは" の続きを読む

#pragma markとは

 

「#pragma mark」は、コメントのようなものです。

ソースコード内に区切りを入れます。

 

確認環境:Xcode 7.2

 

ソースコードの適当な箇所に「#pragma mark - 何か適当な名前」を入力します。

こんな感じで、区切りが入ります。

選択すると、ソースのその場所にJUMPします。

ソースコードが長くなった時に「#pragma mark」を使うと便利です。


Tip_01_01_003a