削除された内容 追加された内容
文法関連ページ作成のための構造修正
文法関連を別ページにう
141 行
</syntaxhighlight>
 
== 制御構造演算子 ==
帰結節や繰り返す文は(ブレースで囲まれた)複文(ブロック)でなければならない。条件式を囲む括弧は不要である。
 
条件式に書けるのは<code>Bool</code>型か<code>Bool</code>型の式か、<code>BooleanType</code>プロトコルを実装する型でなければならない。
 
=== if文 ===
<syntaxhighlight lang="swift">
if 条件式1 {
文1
} else if 条件式2 {
文2
} else {
文3
}
</syntaxhighlight>
 
=== switch文 ===
数値だけでなくあらゆるオブジェクトによって分岐することができる。また暗黙的にブレークされ、'''<code>fallthrough</code>'''キーワードがある場合に限り、次のcase文にフォールスルーする。
 
<syntaxhighlight lang="swift">
switch 式 {
case パターン1:
println("case 1")
//暗黙的にbreakされる
case パターン2, パターン3: //複数条件
print("case 2 or 3")
case パターン4 where 条件式: // where 条件式でパターンに制限を加える事が出来る
print("case 4")
fallthrough // フォールスルー
default:
print("default")
}
</syntaxhighlight>
 
=== for/for-in文 ===
<syntaxhighlight lang="swift">
let names = ["太郎", "花子", "一郎"]
for name in names {
print("\(name)さん、こんにちは!")
}
</syntaxhighlight>
<syntaxhighlight lang="swift">
for index in 0..<5 {
print("index: \(index)")
}
</syntaxhighlight>
 
=== while/repeat-while文 ===
<syntaxhighlight lang="swift">
while 条件式 {
}
</syntaxhighlight>
<syntaxhighlight lang="swift">
repeat {
} while 条件式
</syntaxhighlight>
 
=== guard文 ===
条件を満たさない場合の処理を記述するための構文。else句内では必ずスコープを抜ける処理(<code>return</code>、<code>break</code>、<code>throw</code>等)を記述する必要がある。
<syntaxhighlight lang="swift">
func intToUInt(_ n:Int) -> UInt {
guard n >= 0 else {
print("引数が0未満のため、正しく変換できませんでした。")
return 0
}
return UInt(n)
}
 
let nums = [1, 0, -3]
 
for num in nums {
let unum = intToUInt(num)
print(unum)
}
 
// 実行結果:
// 1
// 0
// 引数が0未満のため、正しく変換できませんでした。
// 0
</syntaxhighlight>
 
=== defer文 ===
スコープを抜けた時に、逆順で実行される。
<syntaxhighlight lang="swift">
func f() {
print("a start")
defer {
print("a end")
}
print("b start")
defer {
print("b end")
}
}
 
f()
 
// 実行結果:
// a start
// b start
// b end
// a end
</syntaxhighlight>
 
= 関数とクロージャ =
関数とクロージャは第一級関数であり、普通のオブジェクトと同じように変数に入れたり、関数の引数や戻り値として受け渡しできる。
 
== 関数 ==
<syntaxhighlight lang="swift">
func calcBMI(weight: Double, height: Double) -> Double {
return weight / (height * height) * 10000
}
</syntaxhighlight>
 
=== 外部引数名 ===
関数の引数には'''外部引数名(external parameter name)'''を指定することができる。対して関数内部のみで使用できる引数名は'''ローカル引数名(local parameter names)'''と呼ぶ。
<syntaxhighlight lang="swift">
func calcBMI(weight w: Double, height h: Double) -> Double {
return w / (h * h) * 10000
}
 
calcBMI(weight: 60, height: 160) // 23.4375
</syntaxhighlight>
 
=== 可変長引数 ===
<syntaxhighlight lang="swift">
func maxInt(first: Int, rest: Int...) -> Int {
var max = first
for num in rest {
if max < num {
max = num
}
}
 
return max
}
 
maxInt(7, 3, 5, 9, 2) // 9
maxInt(6) // 6
</syntaxhighlight>
 
=== デフォルト引数 ===
<syntaxhighlight lang="swift">
func sayHello(name: String = "world") {
print("Hello, \(name)!")
}
 
sayHello() // Hello, world!
sayHello(name: "Swift") // Hello, Swift!
</syntaxhighlight>
 
=== in-out引数 ===
<syntaxhighlight lang="swift">
func swapInts(a: inout Int, b: inout Int) {
let tmp = a
a = b
b = tmp
}
 
var x = 42, y = 99
swapInts(&x, &y)
print("x = \(x), y = \(y)") // x = 99, y = 42
</syntaxhighlight>
 
== クロージャ ==
Swiftでは中括弧<code>{}</code>で囲まれたコードブロックは事実上全て'''クロージャ'''となる。
このとき、引数・戻り値と、本体の処理の間に「<code>in</code>」を書くことで、この2つの部分を区別する。
 
<syntaxhighlight lang="swift">
[1, 2, 3].map({
(number: Int) -> Int in
let result = 3 * number
return result
})
</syntaxhighlight>
 
クロージャの型が推論可能な場合等では、各種省略記法を使用できる。
<syntaxhighlight lang="swift">
[1, 2, 3].map({
number -> Int in
let result = 3 * number
return result
})
</syntaxhighlight>
<syntaxhighlight lang="swift">
[1, 2, 3].map({ number in 3 * number })
</syntaxhighlight>
<syntaxhighlight lang="swift">
[1, 2, 3].map{ 3 * $0 }
</syntaxhighlight>
 
= 演算子 =
=== 算術演算子 ===
{| class="wikitable"
582 ⟶ 388行目:
</syntaxhighlight>
 
== その他 ==
 
識別子にはたいていのUnicode文字を用いることができる。
642 ⟶ 448行目:
</syntaxhighlight>
 
== 他言語との比較 ==
=== C言語との類似点 ===
 
679 ⟶ 485行目:
** インクリメント演算子<code>++</code>、デクリメント演算子<code>--</code>は、Swift 3で削除された。
 
== 脚注 ==
<references />
 
== 外部リンク ==
* [https://swift.org/ 公式ウェブサイト]
* [http://online.swiftplayground.run/ Online Swift Playground]