シンプルな値【Swiftイントロダクション・第1回】

Swiftってどんな言語?

Swiftは2014年にAppleから発表された、比較的新しい言語です。この記事では、Appleの公式ドキュメント(A Swift Tour)を元に、Swiftの基本的な書き方を紹介します。

プログラミングを始める時、最初に書くプログラムといえば “Hello, world.” ですよね!早速”Hello, world.”を出力してみましょう!

print("Hello, world!")

CやObjective-Cに触れたことがある方には馴染みがあると思いますが、Swiftでは、1行のコードが完全なプログラムになっています。出入力や文字列の操作の為に別のライブラリをインポートする必要はありません。main()関数や文末のセミコロンも必要ありません。

シンプルな値

定数の宣言にはlet、変数の宣言にはvarを使います。 定数の値はコンパイル時には決められていなくても構いませんが、値を決められるのは一度だけです。定数を使うと、一度決めた値に名前をつけてその値をプログラムの中で何度も使うことができます。

//変数の宣言
var myVariable = 42
//変数なので値の変更が可能
myVariable = 50
//定数の宣言
let myConstant = 42

定数や変数の型は、代入する値と同じ型でないといけません。しかし、型を必ず明示的に書く必要はありません。定数や変数に値を代入すると、コンパイラが自動で型を推論します。上記の例では、myVariableに代入された初期値が整数なので、コンパイラはmyVariableの型を整数型と推論します。

初期値の情報が型を推論するのに十分でない場合や、初期値がない場合には、変数のあとに、コロンで区切って型を書きます。

let implicitInteger = 70
implicitDouble = 70.0
//70と記述するとコンパイラにはIntとして推論されてしまうのでDoubleをセミコロンの後につけて明示的に型を指定する。
let explicitDouble: Double = 70

値が暗黙的に他の型に変換されることはありません。

screenshot 上の例では、宣言時にコンパイラによってstringの型は文字列に、widthの型は整数値として推論されているので、この二つの定数を足そうとすると型が違うもの同士は足せませんというエラーが出ています。 もし、値を他の型に変換する必要がある時には、変換したい型のインスタンスを明示的に生成する必要があります。

let label = "The width is"
let width = 94
//widthはIntなので文字列にするために明示的に型を変換する
let widthLabel = label + String(width)

もっとシンプルに値を文字列に含める方法があります。括弧と括弧の前にバックスラッシュ()を書いて括弧の中に値を入れます。

let apples = 3
let oranges = 5
let appleTotal = "I have \(apples) apples."
let fruitTotal = "I have \(apples + oranges) pieces of fruit."

この方法を使えば、型を明示的に文字列に変換しなくてもエラーなく実行できます。 screenshot

配列や辞書は角括弧([])を使って生成します。配列はインデックスで、辞書はキーを使って値にアクセスします。最後の値のあとにコンマを置くこともできます。

//配列の生成
var shoppingList = ["catfish", "water","tulips","blue paint"]
//配列の一番目に"bottle off water"を追加
shoppingList[1] = "bottle of water"
//辞書の生成
var occupations = [
                    "Malcom": "Captain"
                    "Kaylee": "Mechanic"
]
//辞書にキーJayneと値Public Relationsを追加
occupations["Jayne"] = "Public Relations"

空の配列や辞書を生成するには、下記のようにします。

//空の配列を生成
let emptyArray = [String]()
//空の辞書を生成
let emptyDictionary = [String: Float]()

変数に新しい値を代入するときや、関数に引数として渡すときなど、型が推論できるのであれば、空の配列は[]で、空の辞書は[:]と書くこともできます。

shoppingList = []
occupations = [:]