
SwiftでiOSアプリを開発するために、まずは基本的な使い方を学びます。ここでは最低限のプログラミングとして、構造体やループ、条件分岐や配列の処理を行い、必要に応じてPythonとの対応についても記載します。Swift初心者の方は是非参考にしてみてください。
こんにちは。wat(@watlablog)です。今回はSwift言語の基礎文法をメモします!
Swift入門
動作環境
本記事のコードは以下の環境で動作確認しました。
Mac | OS | macOS Ventura 13.2.1 |
---|---|---|
CPU | 1.4[GHz] | |
メモリ | 8[GB] | |
Xcode | Version | 14.3(14E222b) |
Swift | Version | 5.8(swiftlang-5.8.0.124.2 clang-1403.0.22.11.100) |
iPhone SE2 | OS | iOS 16.3.1 |
初期コード
この記事では、Xcodeで初期的に作られる以下のHello Worldコードから始めます。
struct(構造体)
struct(構造体)は複数の値をまとめて管理できるもので、データを一元管理する場合等に使用します。classと似ていますが、classはObjective-Cとの併用をする時に使用されることが多いとのことです
データをUIに表示させる方法
以下のコードはUI(ユーザーインターフェース)であるTextに、あらかじめ定義しておいたstruct Personのプロパティを表示させるシンプルなコードです。
struct Personでオブジェクトのプロパティを定義し、各プロパティに値を設定したpersonインスタンスを生成して値を取得するという基本文法を理解できます。
これは過去に勉強したPythonのクラス(というかオブジェクト指向全般)と同じ
データをUIに表示させる(状態の更新:@State)
こちらの方が良く使うかも知れません。一度オブジェクトをインスタンス化した後にプロパティ値を更新する場合は以下のコードのように書きます。ボタンを押した時にageが更新されるような例としてみました。
ここで、@StateはSwiftUIがビュー内の状態を管理するためのPropertyWrapperです。@Stateを使うことで、値の更新時にビューが自動更新されます。privateはなくても動きますが、これを書いておくことでこのインスタンスがContentViewの中だけで使われるようになり、他のメソッドからプロパティが更新されることを防ぎます。他にも詳細が記載されているサイト発見
func(関数)
関数はfuncで定義します。引数には型を指定します。以下のコードはContentViewの中に数値を加算するaddNumbers関数を定義して、結果を文字列としてTextに表示するものです。
「-> Int」は返り値の型を指定しています。returnがない、つまり返り値がない場合は省略できます。
forループ
Swiftにおけるforループの例をいくつかメモします。以下のコードはループ数を0から10までと明示してprint文でiを表示させるだけのシンプルなものです。
forループを使って配列の要素数をループの中で抽出するコードも以下に示します。配列はPythonと同じ書き方でいけました。
以下のコードは上記配列をループ条件に指定する方法と比べやや冗長な書き方ですが、Pythonの「len()」に相当するcountメソッドを使って配列数をループ数にしている例です。「..<」は配列のインデックス範囲外を参照しないようにする文です。
whileループ
whileループもおさらいしておきます。「{}」がある以外はPythonと同じですね。
if文
if文の例です。先ほどのwhileループの中で符号による条件分岐をします。この辺は特に難しくないですね。
配列
開始:終了:刻みで配列を作成する
データ系のプログラミングをする場合、最低限の配列処理を覚えておきたいものです。以下の例は開始と終了、そして刻みを指定して配列を作成するコードです。Pythonでいうnumpy.arange()ですね。
スライス
Pythonのnumpyでは配列操作としてスライスが便利でした。Swiftでスライスを行う例を以下に示します。
基準配列に演算をかけて新しく配列を作成する
科学技術プログラミングをする場合、毎回必ずといって良いほど横軸xを使って縦軸yを計算するような処理を行います。Pythonではxを配列で作っておけば「y = 2 * x」といった簡単な文で作成できました。
Swiftではmapを使って以下のように書くそうです。
ここで「$0」とはxの現在の要素です。つまり、map関数はクロージャ「{}」で囲まれた処理を配列の各要素に対して内部ループで行い、最終的に得られた配列を返す関数ということです。
別ファイルに分ける
複雑なプログラムになるとclassやstructを多用する必要があります。1ファイルで全てを書くとファイル編集時のスクロールが大変になったり、可読性の低下となってしまいます。
そのような場合はファイルを分けましょう。
Swiftにおけるファイル分割は簡単で、「〜.swift」ファイルを新規作成し、単純に分割するだけでOKです。ファイルは「New File...」から作成可能です。

元ファイルの例
例として以下に1つのファイルで成立していたコードを分割してみましょう。まずは1ファイルの元ファイルを以下に示します。このファイルは「SwiftUI/iOSアプリ:録音データをChartsでグラフ化する」に記事で書いたSwiftファイルです。
分割ファイルの例
こちらが「Audio.swift」としてRecorderクラス部分とデータ構造のstructのみを書いています。
そしてこちらがメインの「ContentVIew.swift」です。特にimport文を書かなくてもこれでコードは正常に動作します。
まとめ
今回はPythonしかまともに書けない筆者がSwiftを書く時にまず手をつけた内容を記載しました。
コード全体の構造、ループや条件分岐、配列処理ができれば、内容は薄いですが最低限のプログラミングはできそうです(あとは適宜調べつつ)。
まだまだforループの書き方にも種類があるそうですが、網羅するのではなくすぐにアプリ制作を開始するのが目的のためここまでにします。Swift関連で何か簡単なテクニックを見つけたらこちらに追記しようと思います。
ちなみにボタンイベントの書き方やビルドについては以下の記事にまとめていますので、この記事と合わせて読者の方もアプリ制作をしてみてください!
・SwiftでiOSデバイスのマイクを使って録音機能を追加する方法
それにしてもSwiftはGUIがリアルタイムに更新されるプログラミングなのでライブ感が楽しいですね。Pythonで技術的な計算の検証をしつつSwiftでフロントエンドに対応させていく…というのが自分には合っているのかも?自分のモバイル端末で技術計算アプリをリリースすることを目標に今後も進捗を報告します。
参考文献
[1]:iPhoneアプリ開発集中講座, 藤治仁・小林加奈子・小林由憲, ソシム株式会社, 2022, pp120
[2]:Pythonのクラスの使い方とオブジェクト指向の考え方を理解する
[3]:カピ通信, 【SwiftUI】@Stateの使い方
PythonとSwiftの二刀流を目指します!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!