削除された内容 追加された内容
編集の要約なし
文法関連ページ作成のための構造修正
6 行
== 目次 ==
* Swift/
* [[Swift/文法]] - 主に制御構造、関数定義について
* [[Swift/オブジェクト指向]] - 主に列挙体、クラス、構造体について
 
== 文法定数と変数 ==
 
=== 定数と変数 ===
定数は<code>let</code>キーワードで、変数は<code>var</code>キーワードによって宣言する。
<syntaxhighlight lang="swift">
29 ⟶ 28行目:
</syntaxhighlight>
 
=== 基本データ型 ===
==== 配列 ====
配列は、'''<code>Array<型></code>'''ないし'''<code>[型]</code>'''と宣言する。より直感的な後者が推奨されている。
<syntaxhighlight lang="swift">
43 ⟶ 42行目:
</syntaxhighlight>
 
==== 辞書 ====
Swiftでは、連想配列は'''辞書(Dictionary)'''と呼ばれる。
 
57 ⟶ 56行目:
</syntaxhighlight>
 
==== タプル ====
<syntaxhighlight lang="swift">
let errorStatus: (Int, String) = (404, "Not Found")
142 ⟶ 141行目:
</syntaxhighlight>
 
=== 制御構造 ===
帰結節や繰り返す文は(ブレースで囲まれた)複文(ブロック)でなければならない。条件式を囲む括弧は不要である。
 
条件式に書けるのは<code>Bool</code>型か<code>Bool</code>型の式か、<code>BooleanType</code>プロトコルを実装する型でなければならない。
 
==== if文 ====
<syntaxhighlight lang="swift">
if 条件式1 {
158 ⟶ 157行目:
</syntaxhighlight>
 
==== switch文 ====
数値だけでなくあらゆるオブジェクトによって分岐することができる。また暗黙的にブレークされ、'''<code>fallthrough</code>'''キーワードがある場合に限り、次のcase文にフォールスルーする。
 
176 ⟶ 175行目:
</syntaxhighlight>
 
==== for/for-in文 ====
<syntaxhighlight lang="swift">
let names = ["太郎", "花子", "一郎"]
189 ⟶ 188行目:
</syntaxhighlight>
 
==== while/repeat-while文 ====
<syntaxhighlight lang="swift">
while 条件式 {
201 ⟶ 200行目:
</syntaxhighlight>
 
==== guard文 ====
条件を満たさない場合の処理を記述するための構文。else句内では必ずスコープを抜ける処理(<code>return</code>、<code>break</code>、<code>throw</code>等)を記述する必要がある。
<syntaxhighlight lang="swift">
226 ⟶ 225行目:
</syntaxhighlight>
 
==== defer文 ====
スコープを抜けた時に、逆順で実行される。
<syntaxhighlight lang="swift">
249 ⟶ 248行目:
</syntaxhighlight>
 
=== 関数とクロージャ ===
関数とクロージャは第一級関数であり、普通のオブジェクトと同じように変数に入れたり、関数の引数や戻り値として受け渡しできる。
 
==== 関数 ====
<syntaxhighlight lang="swift">
func calcBMI(weight: Double, height: Double) -> Double {
259 ⟶ 258行目:
</syntaxhighlight>
 
===== 外部引数名 =====
関数の引数には'''外部引数名(external parameter name)'''を指定することができる。対して関数内部のみで使用できる引数名は'''ローカル引数名(local parameter names)'''と呼ぶ。
<syntaxhighlight lang="swift">
269 ⟶ 268行目:
</syntaxhighlight>
 
===== 可変長引数 =====
<syntaxhighlight lang="swift">
func maxInt(first: Int, rest: Int...) -> Int {
286 ⟶ 285行目:
</syntaxhighlight>
 
===== デフォルト引数 =====
<syntaxhighlight lang="swift">
func sayHello(name: String = "world") {
296 ⟶ 295行目:
</syntaxhighlight>
 
===== in-out引数 =====
<syntaxhighlight lang="swift">
func swapInts(a: inout Int, b: inout Int) {
309 ⟶ 308行目:
</syntaxhighlight>
 
==== クロージャ ====
Swiftでは中括弧<code>{}</code>で囲まれたコードブロックは事実上全て'''クロージャ'''となる。
このとき、引数・戻り値と、本体の処理の間に「<code>in</code>」を書くことで、この2つの部分を区別する。
336 ⟶ 335行目:
</syntaxhighlight>
 
=== 演算子 ===
==== 算術演算子 ====
{| class="wikitable"
|-
377 ⟶ 376行目:
|}
 
==== 比較演算子 ====
{|
|-
419 ⟶ 418行目:
|}
 
==== 論理演算子 ====
{| class="wikitable"
|-
430 ⟶ 429行目:
| <code>!</code> || 論理NOT
|}
 
==== 三項演算子 ====
{| class="wikitable"
|-
437 行
| <code>''条件'' ? ''式1'' : ''式2''</code> || ''条件''が真のとき''式1''の値を、偽のとき''式2''の値を返す
|}
 
==== nil結合演算子(Nil Coalescing Operator) ====
{| class="wikitable"
|-
449 ⟶ 450行目:
</syntaxhighlight>
 
==== ビット演算子 ====
{| class="wikitable"
|-
466 ⟶ 467行目:
| <code>~</code> || NOT(ビット反転)
|}
 
==== 代入演算子 ====
{|
|-
507 ⟶ 509行目:
|}
 
==== 範囲演算子(Range operators) ====
{| class="wikitable"
|-
517 ⟶ 519行目:
|}
 
==== キャスト演算子 ====
{| class="wikitable"
|-
529 ⟶ 531行目:
|}
 
==== 演算子オーバーロード ====
Swiftでは任意の型に対して、既存の演算子をオーバーロードして独自の振る舞いを定義することができる。<br />
なお <code>= -> . // /* */</code> は予約されておりオーバーロードしたりカスタム演算子(後述)として定義することはできない。
563 ⟶ 565行目:
</syntaxhighlight>
 
==== カスタム演算子 ====
Swift標準の定義済み演算子(<code>+</code>、<code>*</code>、<code>%</code>など)の他に、全く新しい演算子を定義することができる。新しく定義したカスタム演算子は、標準の演算子と同じように演算子オーバーロードを実装できる。
<syntaxhighlight lang="swift">
580 ⟶ 582行目:
</syntaxhighlight>
 
=== その他 ===
 
識別子にはたいていのUnicode文字を用いることができる。
640 ⟶ 642行目:
</syntaxhighlight>
 
== 他言語との比較 ==
=== C言語との類似点 ===
 
677 ⟶ 679行目:
** インクリメント演算子<code>++</code>、デクリメント演算子<code>--</code>は、Swift 3で削除された。
 
== 脚注 ==
<references />
 
== 外部リンク ==
* [https://swift.org/ 公式ウェブサイト]
* [http://online.swiftplayground.run/ Online Swift Playground]