Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

「Swift 4」でのアプリ開発を始める前に知っておきたい、基本の「き」

Swift 4で最初に知っておきたい3つのポイント 第1回

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

 本連載では、Swiftで基本的なプログラミングができる読者を対象に、「Xcode 9」と「Swift 4」を使ってアプリを開発する際の基本的な内容を、「Swiftでアプリ開発を行う上での基本的な記述の仕方や文法など」「アプリの画面上での具体的な処理など」「外部ライブラリを利用してアプリに機能を実装する方法」の3回に分けて解説します。

目次

はじめに

 Swiftは2014年の公開以来、3.1までバージョンが更新されてきました。バージョンが上がると同時に大きな仕様が相次ぎ、互換性がなかったため次のバージョンアップへの不安もありました。

 ですがSwift 3から4へのバージョンアップで、メソッドや関数の定義や命名規則が統一され、今後は極端な仕様の変更などもなくなると考えられています。

 連載の1回目では、Swift 3以降で変更されたメソッドや関数を中心に、アプリ開発を行う上での基本的なポイントをレビュー的に説明します。各項目で説明する内容についてのSwiftのバージョンは見出しの【】内に記します。

 本連載は冒頭触れた通り、アプリ開発の最初に知っておくべき基本的な事柄の説明をメインテーマとしています。内容によっては、Swift 4以前のバージョンに触れることやSwift自体の言語仕様などには説明が及ばないこともご了承ください。本連載以上の各種情報は末尾の参考文献等を参照してください。

 連載第1回では次の内容について説明します。

  • Swift 3以降で変更されたメソッドや関数の基本的な命名規則や定義の仕方
  • クラスの拡張方法とソースコードの分割

対象読者

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

  • Swiftでの基本的なプログラムができる方
  • Xcodeを使える方

XcodeのインストールとSwiftのバージョンの確認

 Swift 4を使ったアプリ開発を始める前に、実行環境の確認をしておきます。

Xcodeのインストール

 Xcodeは、Appleの開発者向けサイトサイトでこれまでに公開されたバージョンと、これから正式版になる予定のベータ版を含め、複数のバージョンが配布されています。本連載執筆時の時点では、Xcode 9が正式版の最新バージョンです。App Storeで配布されているXcodeが正式版の最新バージョンなので、App Storeを経由してインストールしておいてください。

Swiftのバージョン確認

 Xcodeのインストールとともに、Swiftの実行環境もインストールされます。インストールされたSwiftのバージョンを確認するためには、ターミナルから次のコマンドを実行します。

リスト1 Swiftのバージョン確認コマンド
$  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -version

 「Apple Swift version 4.0」のように、Swiftのバージョンが表示されることを確認してください。

メソッドや関数の定義【Swift 3】

 Swiftのバージョン2とバージョン3ではメソッドや関数の定義の方法が異なりました。Swift 4では、Swift 3以降の方式が採用されたので、その方針に沿って定義されたメソッドや関数について、下図のようなテーブルから2つの画面を表示するサンプルを使い、具体的に説明します。

サンプルのイメージ
サンプルのイメージ

メソッドの定義

 Swift 3以前と比較すると、同じメソッドでもメソッド名自体が短くなりました。ViewControllerをモーダルで表示する例と、地図上のピンをタップして吹き出しを表示する例は以下の通りです。

リスト2 ViewController.swift(ViewControllerをモーダルで表示)
// Main.storyboardを取得
 let storyBoard = UIStoryboard(name: "Main", bundle: nil)
 let row = indexPath.row
if row == 0 {
    // CatNavigationViewControllerのIDのViewControllerを取得してモーダル表示
    let vc = storyBoard.instantiateViewController(withIdentifier: "CatNavigationViewController")
    self.present(vc, animated: true, completion: nil)   // --------(1)
}
リスト3 MapViewController.swift(地図の領域を表示)
// ピンをタップした際に吹き出しを表示する
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {   // --------(2)
    // 吹き出しを取得
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: self.identifier)
    
    //起き出しオブジェクトが空の場合は生成
    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        annotationView!.canShowCallout = true
    } else {
        annotationView!.annotation = annotation
    }
    return annotationView
}

 Swift 3以降では、モーダル表示を行うメソッド(1)、吹き出しを表示するメソッド(2)はこのように記述します。この2つのメソッドをSwift 2以前と比較したものが次の表です。

Swift 2以前とSwift 3以降のメソッドの比較
種類 Swift 2以前 Swift 3以降
モーダル表示を行うメソッド presentViewController(_:animated:completion:) present(_:animated:completion:)
吹き出しを表示するメソッド mapView(mapView:viewForAnnotation:) mapView(_:viewFor:)

 Swift 2以前と比べると、Swift 3以降ではメソッド名と引数のラベルが省略されたり短くなったりしていることがわかります。これらの事柄は他のメソッドでも共通していえることです。

 このメソッドの変更点をまとめると次のようになります。

  • メソッド名自体が短く簡潔になった
  • 引数のラベルもメソッドと同様に簡略化された
  • 第一引数のメソッドは省略可能な場合が多くなった

 Swift 2以前と比較すると、メソッド関連は非常に簡潔に書けるようになりました。具体的には第一引数のラベルは省略されることが多くなりました。例えば、InterfaceBuilderを利用して閉じるボタンを押した際の処理を記述する場合にも、メソッド名がXcodeの機能で記述された時点で第一引数のラベルの前に「_」が表示され、メソッドの実行時に第一引数のラベルは省略されます。

InterfaceBuilderを利用して記述されたメソッド
InterfaceBuilderを利用して記述されたメソッド

 開発者自身がメソッドを作成する場合にも、このルールに従って第一引数のラベルは省略して作成することをお勧めします。

 メソッド名が短くなったため、かつての「xxxWith~」系のメソッドなどは、名前がxxxに統一されました。この場合には第一引数のラベルが存在し、そのラベル名でメソッドの役目を区別します。サンプル内の具体的な例は次の通りです。

リスト4 CatViewController.swift(テーブルに登録されたセルを取得)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // UITableViewに登録されてセルを取得
    let cell = self.tableView.dequeueReusableCell(withIdentifier: self.Identifier)   // --------(3)
    cell?.textLabel?.text = items[indexPath.row]
    return cell!
}

 テーブルに登録されたセルを取得するメソッドは、(3)のようにメソッド名が短くなり、()の中に第一引数のラベルとしてwithIdentifierが入ります。同じメソッドでも、Swift 2以前ではリスト5の通りに記述します。

リスト5 CatViewController.swift(テーブルに登録されたセルを取得 Swift 2以前の場合)
let cell = self.tableView.dequeueReusableCellWithIdentifier(self.Identifier)

 このようにSwift 3以降では、Swift 2以前のメソッド名の「With」の部分から名前と引数を分けるようになりました。

関数の定義

 メソッド名と同様に関数名も短くなりました。「xxxMake」等の関数はMakeが省略されて短い名前になりました。

リスト6 CatViewController.swift
// UIImageViewの矩形を指定
imageView.frame = CGRect(x:0, y:0, width:200, height:130)   // --------(1)
// UIImageViewの中心の位置を指定
imageView.center = CGPoint(x:self.view.center.x, y:self.view.center.y)   // --------(2)
imageView.contentMode = .scaleAspectFit
self.view.addSubview(imageView)

 CGRect関数で矩形、CGPoint関数で位置のオブジェクトを生成できます。Swift 2以前でつけられていた、関数名の後ろの「Make」は不要です。

 メソッドの場合と違って、関数の場合は名前が短くなっても第一引数は省略されていない点にご注意ください。


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

著者プロフィール

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

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

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

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

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