水夫と戯れて

Appleの開発言語Swiftのことを書く。公開されている範囲内で書いています。文章に「?」が含まれているところはよく理解していないところ。

関数

目次>

よくある関数みたい

func sayHello(personName: String) -> String {
    let greeting = "Hello, " + personName + "!"
    return greeting
}

引数

ラベルなしでもよい。

引数がない場合

func sayHello(){

}

引数がある場合

func sayHello(personName: String) {

}

引数と返り値がある場合

func sayHello(personName: String) -> String {
    let greeting = "Hello, " + personName + "!"
    return greeting
}

ラベル名と引数が同じ名称なら # を頭につけてやる func sayHello(#name: String, #age: Int) -> Int {}

ラベル:型で指定。複数ある場合は , でつなぐ 引数なしの場合は( ) (personName: String) (start: Int, end: Int) ( )

外部引数名?

外部に出す名前と別に関数内部で使う名前をつけることができる

ショートハンド外部引数名?

外部引数名と同じ名前をつけたい場合は引数名の先頭にに#をつける (#string: String, #characterToFind: Character)

デフォルトの引数値

デフォルトの値を指定できる (s1: String, s2: String, joiner: String = " ")

可変の引数

...を型の後につける (numbers: Double...)

固定と可変の引数

デフォルトでは引数は固定値。可変にしたい場合はラベルの前にvarをつける (var string: String, count: Int, pad: Character)

In-Out引数

引数としても、返り値としても使うような場合? ラベルの前にinoutをつける (inout a: Int, inout b: Int)

func swapTwoInts(inout a: Int, inout b: Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)

返り値

-> 返り値の型 で指定 返り値なしの場合は->はいらない。

-> String

複数の値を返すことができる。これは便利。 -> (vowels: Int, consonants: Int, others: Int)

関数タイプ

同じ引数、同じ返り値を持つ関数を変数に入れることができる? 他の関数の引数にも使うことができるようだ 返り値にも使うことができるようだ

入れ子になった関数