Swift:函数调用之间的区别

时间:2015-11-03 07:06:21

标签: ios iphone swift

我是Swift编程的新手。我无法理解以下代码。在以下代码中调用

  1. incrementBy 方法:我必须在第二个参数中键入 numberOfTimes 。但是,
  2. 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")
    
  3. 为什么会有细微差别?请解释一下。

3 个答案:

答案 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
相关问题