こちらのSwift3.0バージョンです
http://qiita.com/merrill/items/2e143c0e3ecfb04243a2
関数
引数なし・戻り値なし
func hello(){
print("Hello!")
}
引数なし・戻り値あり
func hoge() -> Int{
return 100
}
引数あり・戻り値あり
func hoge(num: Int) -> Int{
return num
}
hoge(num: 100)
引数あり(引数の名前を省略)
func hoge(_ a: Int){
print(a)
}
hoge(100) // a: を省略できる
引数あり(複数)
func hoge(a: Int, b: String){
print(a)
print(b)
}
hoge(a: 100, b: "テスト")
引数あり(複数かつ数を指定しない)
引数の値は配列として格納される。
func hoge(a: Int...){
print(a[0])
print(a[1])
}
hoge(a: 100, 200)
引数あり(初期値を設定)
func hoge(a: Int = 100){
print(a)
}
hoge() // => 100
hoge(a: 200) // => 200
引数を使って変数宣言
引数のパラメータは、通常定数(let)として扱われるので、値を代入することはできない。
func hoge(a: Int){
a = 200 // エラー
}
hoge(a: 100)
代入したい場合は、関数の中でvarの変数に入れ直す
func hoge(a: Int){
print(a) // => 100
var a = a
a = 200
print(a) // => 200
}
hoge(a: 100)
引数名とは違う名前を呼び出し時に指定
(あまりない使わない)
func hoge(num a: Int){
print(a)
}
hoge(num: 100)
戻り値が複数
タプルを使用する
func compareNumber(arr: [Int]) -> (min: Int, max: Int) {
let min = arr.min()
let max = arr.max()
return (min!, max!)
}
var result = compareNumber(arr: [1,2,3,4,5,6,7,8,9,10])
result.min // => 1
result.max // => 10
オーバーロード
引数の数や、外部引数の名前が異なれば、同じ名前の関数をたくさん定義できる。
func hoge(){
print(100)
}
func hoge(a: Int){
print(a)
}
func hoge(b: Int){
print(b)
}
hoge() // => 100
hoge(a: 200) // => 200
hoge(b: 300) // => 300
クロージャ
名前がない関数。{}で囲まれたブロック。メソッドのように呼び出すのではなく、その場で実行される。関数の引数でよく利用される。
引数なし・戻り値なし
型は () -> Void
{() -> void in
...
}
引数あり・戻り値なし
型は (a: Int) -> Void
{(a: Int) -> Void in
...
}
引数あり・戻り値あり
型は (a: Int) -> Int
{(a: Int) -> Int in
return a
}
クロージャを変数に入れることも可能
var block = {(a: Int) -> Int in
return a
}
block(2) // => 2
サーバリクエストのコールバックとして、クロージャを引数で受け取る関数を書くのはよく使われる
# requestメソッド呼び出し
request(
params: params,
success: {() -> Void in
print("通信成功")
},
error: {() -> Void in
print("通信エラー")
}
)
# クロージャを受け取るrequestメソッド
func request(request: [String:Any], success:()-> Void, error:()-> Void) {
//渡されたクロージャを実行する
success()
}
クロージャを Optional にする場合
func request(success: (()->Void)?) {
success?()
}