1. まとめトップ

この記事は私がまとめました

引数も返り値も無い関数

Swiftでは、関数は以下のように記述します。引数も返り値もないパターンです。関数の定義は「 func 」から始まります。続いて関数名と、その後ろには引数のリスト ( 今回は無いので括弧のみ )。処理の中身はブレース ( 波括弧 ) の中に書きます。呼び出し方は、関数名に括弧で、C言語によく似ています。

  // 関数の定義
  func sayHello() {
   println( "Hello" )
  }

  // 関数の呼び出し
  sayHello() // "Hello"

引数と返り値のある関数

引数のある関数は、括弧内に引数名と型をコロンで区切って記述します ( 変数宣言と同じ記述です )。返り値は「 -> 」の後に型を書きます。返り値は、return文を使います。

return文で返す値は括弧で囲う必要はありません。

  // 関数の定義
  func sayHello( name : String , weather : String ) -> String {
   return "Hello \(name), it's \(weather) today."
  }

  // 関数の呼び出し
  var mes : String = sayHello( "John" , "fine" )
  // "Hello John, it’s fine today."

【型推論のメリットとデメリット】上記のような、変数宣言をした変数に直接関数からの返り値を入れる場合は、関数の返り値の型が型推論に用いられるため、以下のように変数の型は省略することが可能です。ただし、省略すると関数の仕様を知らないと変数の方がコードから読み取れなくなるというデメリットもあります。

  var mes = sayHello( "John" , "fine" ) // 関数の返り値の型を知らないとmesの型が分からない

ラベル付き引数 ( External Parameter Name )

Objective-Cのように、各引数が何を意味しているのかを明記するためのラベルをつけることができます。呼び側は、ラベルにコロンをつけた後に値を書きます。

呼び側でラベルを省略することはできません。

  func sayHello( name aName : String, weather aWeather : String ) -> String {
   return "Hello \(aName), it's \(aWeather) today."
  }

  var mes : String = sayHello( name : "John", weather : "fine" )
  // "Hello John, it's fine today."

 ラベルと引数名が同じ場合は、引数の前に#をつけることでコンパクトに記述ができます。ちなみに、関数を呼ぶ側の記述は、ラベルがついているためDictionaryのようにも見えますが、引数の順番は変えることはできません。

  func sayHello( #name : String, #weather : String ) -> String {
   return "Hello \(name), it's \(weather) today."
  }

  var mes:String = sayHello( name : "John", weather : "cloudy” )
  // "Hello John, it's cloudy today."

デフォルト値付き引数

Swiftでは引数にはデフォルト値を指定することが可能です。引数の後にイコールを書いてデフォルト値を書きます。デフォルト値があるため、呼び側でその引数は省略して構いません。ただ、引数にラベルがないとどの引数かが分からなくなりますので、変数名が自動的にラベルに設定されます。

そのため # によるラベルの指定はできなくなります。

 func sayHello( name : String = "Micheal" , weather : String = "fine" ) -> String {
   return "Hello \(name), it's \(weather) today."
  }

  var mes1 : String = sayHello( name : "John" ) // weatherを省略した場合
  var mes2 : String = sayHello( weather : "fine" , name : "John" ) // 順番は変えてもOK

 なお、デフォルト値がある場合は、呼び側の引数の順番は入れ替わってもよいようです。まるで辞書を渡しているような感じです。

可変個引数は配列

関数の引数が可変個の場合は、引数の型の後に「 ... 」をつけます。すると、その引数は、関数の中から配列として見えます。

  func sum( numbers : Int... ) -> Int { // 引数の合計値を求める
   // numbers = [ 1, 2, 3 ] となる
   var total = 0
   for n in numbers {
    total += n
   }
   return total
  }

  var t = sum( 1, 2, 3 )

続き

参考リンク

1