Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

にゃんこなサンプルコードで学ぶSwiftのクラスとメソッド

Objective-CユーザーのためのSwift入門 第3回

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

 本連載では、Objective-Cの基本的なプログラムが出来る読者を対象に、Swiftを使ってアプリを開発する際の基本的な事柄を解説します。Objective-CもSwiftもC言語を母体としたプログラム言語なので両者に共通する概念は非常に多いです。Objective-CとSwiftとの最低限度の違いを踏まえつつ、Swiftでのアプリ開発にシフトして行けるような内容をサンプルを交えながら解説します。今回は、Swiftでのクラスやメソッドの作り方/使い方について説明します。

目次

はじめに

 前回までは、Swiftの文法や演算子について説明しました。連載第3回は、Swiftでのクラスやメソッドの作り方/使い方について説明します。

 対象読者をObjective-Cが分かる方としている関係上、Objective-C自体の言語仕様やXcodeの使い方については解説を割愛する場合があることをご了承ください。同様にSwift自体の説明も必ずしも十分でない場合があります。そのような場合は末尾の参考文献等を参照してください。

対象読者

 本記事は、次の方を対象にしています。

  • Objective-Cの基本的なプログラムが出来る方
  • Xcodeを使える方

クラス

 Swiftのプログラムは、Objective-Cと同様にクラスという単位で構成されます。クラスの中で、オブジェクトの属性を保持するインスタンス変数と処理を定義するメソッドを定義します。

クラスの扱い

 Objective-Cでは、クラスを定義する際に、ヘッダファイル/実装ファイルの2つのファイルが必要でした。Swiftでは、1ファイルでクラスを定義できるようになりました。2つのクラスを比較すると次のようになります。

リスト1 Objective-Cヘッダファイルの例(Cat.h抜粋)
@interface Cat : NSObject
{
    // インスタンス変数を定義
    NSString *catName;
    int catAge;
}
// プロパティを定義
@property(weak) NSString *name;
@property(assign) int age;

@end
リスト2 Objective-C実装ファイルの例(Cat.m抜粋)
#import "Cat.h"
@implementation Cat
@synthesize name=catName, age = catAge;

-(id)init {
	if ([super init]) {
  }
  return self;
}

@end

 同じ内容をSwiftで表したコードは、以下のとおりです。

リスト3 Swiftでのクラス定義の例(Cat.swift抜粋)
// Catクラスを定義
class Cat : NSObject
{
    // プロパティ
    var Name:String    // 名前
    var Age:Int        // 年齢

    // 初期化処理
    init(name:String, age:Int)
    {
        Name = name
        Age = age
    }
    ...中略...
}

 Objective-Cでは、ヘッダファイル内にインスタンス変数にアクセスするプロパティを記述していたのに対し、Swiftでは、ヘッダファイルという概念がないのでインスタンス変数をプロパティとして扱えます。メソッドに関しても同様に、ヘッダファイルで宣言のみを行うこともありません。Swiftでは、クラスの扱いが非常に簡略化されています。

クラスの定義

 クラスはclassで定義します。クラス名を「class」のあとに表し、中括弧内にプロパティやメソッドを定義します。クラスの書式は次の通りです。

書式1 クラスの定義
[修飾子] class クラス名 [:スーパークラスやプロトコル]
{
    [プロパティ変数の定義]

    // 初期化処理の定義
    init( [引数] )
    {
        // 初期化処理の内容
    }
}

 修飾子には次のものがあります。

Swiftクラスの修飾子
名前 概要
public どこからでもアクセス可能、既定
private クラスが定義されているソースコード内のみアクセス可能
internal フレームワーク/モジュール内でアクセス可能

 上記の通り、Swiftでのクラスの定義はJavaやPHPに似ています。Objective-Cのような独特の表現がないため、非常にすっきりとしています。

 初期化処理はinitメソッド内で行います。メソッドについては、次項で説明します。

 具体的なクラスの例を次に挙げます。名前(Name)と年齢(Age)をプロパティに持つCatクラスは、次のように定義できます。継承するクラスや実装するプロトコルはクラス名の後ろに「:」をつけて名前を記述します。

リスト4 クラスの定義の例(Cat.swift抜粋)
// Catクラスを定義
class Cat : NSObject
{
    // プロパティ
    var Name:String    // 名前
    var Age:Int            // 年齢
    var Territory:String // 縄張り
    var Favorite:String // 好物

    // 初期化処理
    // 名前と年齢を引数で渡してセット
    init(name:String, age:Int)
    {
        Name = name
        Age = age
    }
...中略...
}

 プロパティに関しては、利用する変数を記述するのみで定義できます。その際にvar/letで変数/定数としての定義が可能です。


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

著者プロフィール

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

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

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

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

バックナンバー

連載:Objective-CユーザーのためのSwift入門
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5