Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Swift 4におけるオブジェクト間での相互作用

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

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

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

目次

 

はじめに

 第2回まではSwift 3、4でのプログラムの新しい書き方や追加されたよく利用する新しい機能について説明しました。第3回のテーマは「実際にアプリ内の画面を動かす際の処理」です。iOSアプリで動的な画面を表示するための基本的な処理である、パラメータの受け渡しとデリゲートについて、サンプルを用いて説明します。また、パラメータの処理に関して、Swift 3以降で仕様の固まった新しい文法も紹介します。各項目で説明する内容についてのSwiftのバージョンは【】内に記します。

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

対象読者

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

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

画面間でパラメータを渡す

 Webアプリ同様、iOSアプリでも画面間でパラメータを受け渡し、その後の処理を動的に行うことが一般的です。iOSアプリにおける画面間のパラメータの渡し方と変数の扱いについては、最もよく利用される、プロパティによる方法を例に挙げて解説します。

画面間でパラメータを受け渡す

 受け取ったパラメータを画面に表示するだけのサンプルを作成しながら説明していきます。

作成するサンプル
作成するサンプル

 はじめに、ビューコントローラーでパラメータを受け渡すためのプロパティを宣言します。文字列型のパラメータを受け取るためには次の通りにプロパティを宣言します。

リスト1 LabelViewController.swift
class LabelViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    var message: String?
...略...

 サンプルでは、messageの名前で文字列型のプロパティを宣言しています。パラメータが空の場合も考慮して、後ろに「?」をつけてnilを許容できるオプショナル型にしておきます。

 パラメータを渡す側ではリスト2の通り、プロパティに文字列をセットします。

リスト2 ViewController.swift
let vc = storyBoard.instantiateViewController(withIdentifier:"LabelViewController") as! LabelViewController
vc.message = "Hello"
self.navigationController?.pushViewController(vc, animated: true)

パラメータのnilチェックにif文を利用する【Swift 3】

 パラメータがオプショナル型で渡された場合など、変数の値がnilかどうかをチェックするには、if let文を利用します。if let文を利用すると、変数の値がnilでない場合は、letで格納した新しい変数名を使ってその後の処理を行うことができます。if let文の書式は次の通りです。

リスト3 if let文の書式
if let 新しい変数名 = 変数名 {...}

 変数の値がnilでない場合、if以下のブロックが実行されます。変数の値がnilの場合は処理を抜けるため、if以下のブロックは実行されません。

 if let文を利用し、message変数の値がnilでない場合に値を画面へ表示する処理がリスト4です。

リスト4 LabelViewController.swift
class LabelViewController: UIViewController {
  @IBOutlet weak var label: UILabel!
  var message: String?
  
  override func viewDidLoad() {
    super.viewDidLoad()

    // 変数名messageの値がnilでない場合、ラベルの文字列として画面に表示
    if let text = self.message {
        self.label.text = text
    }
}

 Swiftのオプショナル型とif let文を利用することで、変数がnilの場合の特別な処理は不要になります。

変数の値によって処理を中断するguard文【Swift 3】

 if let文と同様に、変数の値によって処理を行う文にguard文があります。guard文はif let文と異なり、条件式がfalseの場合の処理に重点が置かれています。guard文の書式は次の通りです。

リスト5 guard文の書式
guard 条件式 else { return や break などの処理の中断 }

 連載第2回のJSONを解析するサンプル内では次のように利用しています。

リスト6 JsonViewController.swift
// URLRequestを生成してJSONのデータを取得
let request: URLRequest = URLRequest(url:url)
let session = URLSession.shared
let task : URLSessionDataTask = session.dataTask(with: request, completionHandler: {(data, response, error) in
    // APIからの戻り値がなければ処理を終了
    guard let responseData = data else{ return }

 サンプルでは、APIから取得したdataがnilの場合に処理を中断しています。変数dataの値がnilでない場合、guard文以降の処理では新しい変数名であるresponseDataをそのまま利用できます。

++/--演算子の廃止とfor文の記述【Swift 3】

 変数の値がコレクションの場合も、前項のif let文/guard文を使ってnilの際の処理が可能です。ただし、Swift 3以降では++もしくは--演算子を利用するfor文は廃止されました。Swift 3以降のfor文では範囲演算子を使います。範囲演算子には「...」と「..<」の2種類あり、次の表の通り最後を含む/含まないの違いがあります。

範囲演算子の種類
範囲演算子 概要
a...b bを含む
a..<b bを含まない

 範囲演算子の「..<」を使ったfor文の書式は次の通りです。

リスト7 for文の書式
for カウンタ変数 in 初期値..<上限値 { ... }

 このfor文を使ってJSONの解析結果の配列を出力するサンプルがリスト8です。

リスト8 JsonViewController.swift
// for文でJSONの解析結果を取り出す
for i in 0..<resultList.results.count {
  print(resultList.results[i].gender)
  print(resultList.results[i].name.title)
}

 カウンタ変数のiの値が0からresultList.results.countの1つ前まで増加します。変数iの前にvarやletは必要ありません。

強化されたSwitch文【Swift 4】

 変数の値の分岐処理でよく利用されるSwitch文は、Swift 4以降、範囲演算子を利用できるようになりました。範囲演算子を利用したSwitch文のサンプルは次の通りです。

リスト9 LabelViewController.swift
let number = 6
switch number {
case ..<5:
  print("5より小さい")
case 5...:
  print("5以上です")
default:
  break
}

 範囲演算子が使えるため、Swift 4以降のSwitch文ではパターンマッチとして使うことも可能になりました。


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

著者プロフィール

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

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

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

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

バックナンバー

連載:Swift 4で最初に知っておきたい3つのポイント
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5