外部引数名を指定する時に注意しなければならないタイミングが3つある。
1. イニシャライザ呼び出し時
2. インスタンスメソッド呼び出し時
3. メソッド呼び出し時
下記に、タイミング別で外部引数名の指定がどうなっているのか、ルールを記述する。
1. イニシャライザ呼び出し時
-
外部引数名をすべて指定しなければならない。
-
定義側に外部引数名が指定されていなかった場合、内部引数名を外部引数名として指定しなければならない。
-
定義側で外部引数名を
_
で記述した場合、第2引数以降に外部引数名を指定しなくても良い。
class Person {
var id: UInt
var name: String
var age: UInt8
init( myId id: UInt, name: String, _ age: UInt8){
self.id = id
self.name = name
self.age = age
}
}
let person = Person( myId: 12345, name: "Taro", 20 )
2. インスタンスメソッド呼び出し時
-
メソッドの第2引数以降に外部引数名をつけないといけない。
-
定義側に外部引数名が指定されていなかった場合、内部引数名を外部引数名として指定しなければならない。
-
定義側で外部引数名を
_
で記述した場合、第2引数以降に外部引数名を指定しなくても良い。
class Person {
var id: UInt
var name: String
var age: UInt8
init( myId id: UInt, name: String, _ age: UInt8){
self.id = id
self.name = name
self.age = age
}
func speak ( contents: String, toName to: String, when: String ){
println("TO: \(to)")
println(" \(contents)")
println("@\(when)")
}
}
let person = Person( myId: 12345, name: "Taro", 20 )
person.speak("Hello!", toName: "Kunio", when: "2015-07-22")
3. メソッド呼び出し時
-
メソッドの引数にデフォルト値が設定されているメソッドの引数に引数を渡す場合、必ず外部引数名を指定する必要がある。
-
定義側に外部引数名が指定されていなかった場合、内部引数名を外部引数名として指定しなければならない。
func printName( firstName str1: String = "Taro", str2: String = "Sato" ){
println( "\( str1 ) \( str2 )" )
}
printName( firstName: "Jiro" , str2: "Imada")