CodeZine(コードジン)

特集ページ一覧

Swiftでアプリの画面を作ろう! ~Objecive-Cとの比較で学ぶ

Objecive-CユーザーのためのSwift入門 第4回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/02/09 14:00
目次

ビューコントローラーを利用する

 ビューコントローラーは、iOSアプリの開発で最も利用されるクラスが画面を管理するクラスです。一般的なiOSアプリの画面はビューコントローラーで作られています。ビューコントローラーを管理するクラスは、UIViewControllerクラスといい、画面を管理するメソッドと画面の下地になるビューを持ちます。このビューの上にオブジェクトを配置することで、アプリの開発を進めます。

画面作成のイメージ
画面作成のイメージ

 Swiftでのアプリ開発も、Objective-Cと同様に基本的な機能を持つ既存のクラスのサブクラスを組み合わせることによって行います。あるクラスを継承したクラスを作成する場合、ある程度コードが記述されたものをXcodeで簡単に生成できます。例えば、UIViewControllerクラスのサブクラスを生成する際は次のようにXcodeを操作します。

 [File]-[New]で表示されるウィンドウ内で[Cocoa Touch Class]を選択します。次にクラスの詳細を指定するウィンドウ内で、以下のようにUIViewControllerのサブクラスとして新規にクラスを生成します。

UIViewControllerクラスのサブクラスを生成する例
UIViewControllerクラスのサブクラスを生成する例

 生成されたSampleViewController.swiftには、次のようにコードが記載されています。

リスト1 生成されたSampleViewControllerクラス(SampleViewController.swift抜粋)
import UIKit

class SampleViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

 画面が呼び出された際に実行されるviewDidLoad()メソッド、メモリが足りなくなった際に実行されるdidReceiveMemoryWarning()メソッドが、最初から記載されています。Objective-Cの時と同様に、開発者が最初からコードを記述する必要はありません。画面にコンテンツを配置する際には、viewDidLoad()メソッドの中にコードを追記します。

 ビューコントローラーを呼び出す場合は、初期化処理のinit(nibName:bundle:)メソッドを利用します。InterfaceBuilderで作成したxibファイルを利用する場合としない場合の2通りの呼び出し方があります。

リスト2 ビューコントローラーの初期化処理(AppDelegate.swift抜粋)
var viewController : ViewController = ViewController(nibName : nil, bundle : nil)
リスト3 画面xibを指定しての初期化処理(AppDelegate.swift抜粋)
// SampleViewController.xibファイルを指定しての初期化処理
var sampleViewController : SampleViewController = SampleViewController(nibName : "SampleViewController", bundle : nil)

 xibファイルを利用する場合に、ラベルnibNameに対する引数としてxibファイルの名前を指定します。bunldsの引数はxibファイルの場所です。指定しない場合は、自動的にアプリ内の領域が指定されますので特に指定しなくてもかまいません。

Swiftへ移行する際に気をつける点

 Objective-CからSwiftでのアプリ開発に移行する上で、気をつけておくと良い点を、両者での例を比較しながら簡単にまとめます。

1)初期化メソッド

 Objective-Cで、クラス単位でそれぞれinit~ メソッドで定義されていた初期化処理は、Swiftではinitメソッドで統一されます。Swiftでは、initメソッドは内の引数で初期化の内容を区別します。また、初期化処理の際に、initメソッドそのものは記述せずにラベルと引数のみを記述します。ビューコントローラーの初期化処理の例を以下に記します。

リスト4 ビューコントローラーの初期化処理(AppDelegate.m抜粋)
ViewController *viewController = [[ViewController alloc] initWithNibName:nil bundle:nil];
self.window.rootViewController = viewController;
リスト5 ビューコントローラーの初期化処理(AppDelegate.swift抜粋)
var viewController : ViewController = ViewController(nibName : nil, bundle : nil)
self.window!.rootViewController = viewController

 上記の例では、Objective-CのinitWithNibName:bundle:メソッドが、Swiftではinitメソッドで扱われ、nibNameとbundleが引数になります。

2)クラスメソッドの廃止

 Objective-Cでよく利用されていたクラスを直接起動するクラスメソッドは、Swiftではなくなります。Swiftでは全てinitメソッドに統一されます。よく利用されるUIImageクラスの例では次のようになります。

リスト6 UIImageの初期化処理(ViewController.m抜粋)
// クラスメソッドでの初期化処理
UIImage *image = [UIImage imageNamed:@"sample.jpg"];
リスト7 UIImageの初期化処理(ViewController.swift抜粋)
// initソッドでの初期化処理
var image : UIImage = UIImage(named: "sample.jpg")!

 Objective-Cに慣れた開発者は戸惑うことも多いと思いますが、Swiftではinitメソッドのみを扱えばいいので、プログラムが簡単になったともいえます。

3)属性を示すオブジェクト

 属性を示すオブジェクトの定義が変更されました。Objective-Cでは、属性とオブジェクトの関係は1対1でした。Swiftでは、[広義の属性].[詳細]というように2階層のオブジェクトで表現します。各オブジェクトの上層に広い意味のオブジェクトが存在するイメージです。モーダルビューの表示形式を指定する例を以下に記します。

リスト8 モーダルビューの表示形式を指定(ViewController.m抜粋)
// 下から表示
modalViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
リスト9 モーダルビューの表示形式を指定(ViewController.swift抜粋)
// 下から表示
modalViewController.modalTransitionStyle = UIModalTransitionStyle.CoverVertical

4)一般的なメソッド

 一般的なメソッドに関しては、メソッドの名前/ラベル/引数はほぼ同じです。Objective-Cでは、[オブジェクト メソッド:引数]でしたが、Swiftでは、オブジェクト.メソッド(引数)となります。多くの場合、記述の形式をSwiftに合わせるだけで同じメソッドを利用できます。以下にモーダルビューの表示とアラートの表示の例を記します。

リスト10 モーダルビューを表示(ViewController.m抜粋)
// モーダルビューを表示
[self presentViewController:modalViewController
                 animated:YES
                 completion:^(){
                     // 処理の完了時にはアラートを出す
                     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"画面が切り替わりました"
                                                                                   message:nil
                                                                                   delegate:nil
                                                                                   cancelButtonTitle:nil
                                                                                   otherButtonTitles:@"OK", nil];
                       [alert show];
                     }];
リスト11 モーダルビューを表示(ViewController.swift抜粋)
// モーダルビューを表示
self.presentViewController(modalViewController,
            animated: true,
            completion:{
              // 処理の完了時にはアラートを出す
              var alert : UIAlertView = UIAlertView( title: "画面が切り替わりました",
                                                                        message: "",
                                                                        delegate: nil,
                                                                        cancelButtonTitle: nil,
                                                                        otherButtonTitles:"OK" )
              alert.show()
            }
        )

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Objective-CユーザーのためのSwift入門

著者プロフィール

  • WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5