[iOS] Swiftのメソッドの引数の書き方をまとめる

2014/12/3

こんにちは。きんくまです。

Swiftのメソッドの引数の書き方があやふやだったので、まとめようと思いました。

引数なし

引数なしはそのまま呼び出せます

class ParamSample{
    func noParam(){
        println("hello")
    }
}
//呼び出す
let sample = ParamSample()
sample.noParam()

1つの引数

1つの引数の場合は、何もなければ引数名をかかずに呼び出せます。

class ParamSample{
    func oneParam(age:Int){
        println("Your age is \(age)")
    }
}
//呼び出す
let sample = ParamSample()
sample.oneParam(3)

2つの引数

2つの引数の場合は、2つ目の引数名を書く必要があります。
じゃあ、1つめの引数も引数名をかきたい場合はどうしたいかというと次の項目です。

class ParamSample{
    func twoParam(age:Int, name:String){
        println("\(name) is \(age)")
    }
}
//呼び出す
let sample = ParamSample()
sample.twoParam(3, name:"Taro")

# ハッシュ

1つ目の引数名の前に#(ハッシュ or シャープ)がつくことで、1つ目の引数も引数名つきで呼び出せます。

class ParamSample{
    func twoParamWithHash(#age:Int, name:String){
        println("\(name) is \(age)")
    }
}
//呼び出す
let sample = ParamSample()
sample.twoParamWithHash(age: 3, name: "Taro")

外部引数名

外部引数名(external parameter name)を引数名の前に書いてあげれば、メソッドを呼ぶときは外部引数名で呼び出して、メソッド内部ではローカル引数名(local parameter name)で使用できます。

さっきの # は実はこの外部とローカルが同じものであるとコンパイラに知らせてあげる役目を果たしていました。
また、第二引数以降はデフォルトの引数が外部引数名として認識されるみたいです。

最初なんでこの外部とローカルの引数名があるのかな?と思ったのですが、外部引数名に機能表す説明的な長い名前を使って、ローカル引数名にもうすこし短い名前を使うという使い分けができるんだなと思いました。

class ParamSample{
    func twoParamWithLabel1(ageLabel age:Int, name:String){
        println("\(name) is \(age)")
    }
    
    func twoParamWithLabel2(ageLabel age:Int, nameLabel name:String){
        println("\(name) is \(age)")
    }
}
//呼び出す
let sample = ParamSample()
sample.twoParamWithLabel1(ageLabel: 3, name: "Taro")
sample.twoParamWithLabel2(ageLabel: 3, nameLabel: "Taro")

_ (アンダースコア)

外部引数名を _(アンダースコア)にしたときは、呼び出しの際引数名を省略可能です。
第一引数はそもそも引数名を必要としないので、_ を足していません。

class ParamSample{
    func twoParamWithUnderscore(age:Int, _ name:String){
        println("\(name) is \(age)")
    }
}
//呼び出す
let sample = ParamSample()
sample.twoParamWithUnderscore(3, "Taro")

引数のデフォルトの値

引数のうしろに = をつけて値を書くことでその引数が省略されたときの値を設定できます。
別言語だと = つきは後ろにまとめないといけなかったりするのですが、swiftだとどこでもOKなようです。このあたりにちょっと萌えちゃえました。

class ParamSample{
    func threeParamWithDefault(age:Int, name:String = "Jiro", message:String){
        println("\(name) is \(age). \(message)")
    }
}
//呼び出す
let sample = ParamSample()
//nameを省略している
sample.threeParamWithDefault(3, message:"Hi!")

という感じでだいたい大丈夫そうかなと。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

LINEスタンプ作りました!
毎日使える。とぼけたウサギ。LINEスタンプ販売中! 毎日使える。とぼけたウサギ

ページトップへ戻る