我是Swift编程的新手。我无法理解以下代码。在以下代码中调用
sampleFunc 方法:我不必在第二个参数中输入 lastName 。
class Counter {
var count: Int = 0
func incrementBy(amount: Int, numberOfTimes : Int) {
count += amount * numberOfTimes
}
}
var counter = Counter()
counter.incrementBy(1, numberOfTimes : 3)
print(counter.count)
func sampleFunc(firstName : String, lastName : String){
print("Hello \(firstName) \(lastName)")
}
sampleFunc("Abel", "Rosnoski")
为什么会有细微差别?请解释一下。
答案 0 :(得分:5)
当封装在类(或结构或枚举)中时,方法的第一个参数名称不包含在外部,而所有后面的参数名称都包含在外部。不包含在外部的参数,在调用方法时不必为它们指定名称。但是对于外部包含的那些你必须这样做。
您的方法incrementBy(amount: Int, numberOfTimes : Int)
已封装在您的班级中,这就是为什么第二个参数会自动包含在外部的原因。这意味着您必须在为参数提供值之前键入numberOfTimes
。这就是为什么你必须这样称呼它:
counter.incrementBy(1, numberOfTimes : 3)
您的第二种方法func sampleFunc(firstName : String, lastName : String)
未包含在您的课程中。这就是为什么您不必为其参数提供名称的原因。这就是为什么你可以这样称呼它:
sampleFunc("Abel", "Rosnoski")
您可以阅读更多详情here。
编辑:正如User3441734所指出的那样(我引用)“有一个例外。如果外部名称未指定为_”,则带参数的init始终需要命名参数。您可以在此处详细了解Customizing initialization。
答案 1 :(得分:4)
@NSNoob做了一个很好的解释,我刚刚添加了一些例子来理解函数调用的功能:
Runtime.getRuntime().exec("mongoimport -d <dbname> -h <>..");
您可以删除命名第二个参数:
func sampleFunc(firstName : String, lastName : String) {}
sampleFunc("First", lastName: "Last")
如果您想为所有参数添加命名:
func sampleFunc(firstName : String, _ lastName : String) {}
sampleFunc("First", "Last")
如果要为param设置默认值:
func sampleFunc(firstName firstName : String, lastName : String) {}
sampleFunc(firstName: "First", lastName: "Last")
希望有所帮助
答案 2 :(得分:0)
func a(param1:Double, param2:Double) -> Double {
return param1*param2;
}
func a2(p1 param1:Double,p2 param2:Double) -> Double {
return param1*param2;
}
据我了解并在游乐场进行了一些试验,如果您没有定义参数标签,则必须使用参数名称。
var c = a(3.2,2.3)
c //gives error
var b = a(param1:3.2,param2:2.3);
b
var d = a2(p1:3.2,p2:2.3);
d
var e = a2(param1:3.2,param2:2.3)
e //gives error