Swift 如何使函数参数可选(避免每次调用所有参数)

Swift 如何使函数参数可选(避免每次调用所有参数),swift,Swift,我想使函数参数成为可选的,因此当我调用函数时,我不必总是拥有所有三个参数,例如: func doSomething(name: String, age: String, gender: String?) 在这种情况下,我不想总是指定性别,所以我可以调用: doSomething(name: "Dave", age: 25, gender: "Male") 或者不考虑性别,直接打电话: doSomething(name: "Dave", age: 25) 但当我这样做时,它会告诉我它意外地发

我想使函数参数成为可选的,因此当我调用函数时,我不必总是拥有所有三个参数,例如:

func doSomething(name: String, age: String, gender: String?)
在这种情况下,我不想总是指定性别,所以我可以调用:

doSomething(name: "Dave", age: 25, gender: "Male")
或者不考虑性别,直接打电话:

doSomething(name: "Dave", age: 25)

但当我这样做时,它会告诉我它意外地发现了nil,或者缺少一个参数,我如何才能使“性别”输入成为可选的?

只需给它一个默认值

func doSomething(name: String, age: String, gender: String? = "Male")

引自

通过在参数类型之后为参数指定值,可以为函数中的任何参数定义默认值。如果定义了默认值,则在调用函数时可以忽略该参数


更新:请注意,声明可选类型的变量并不意味着您可以在调用函数时忽略此参数。这仅仅意味着该参数可以根据其类型保存一个值,或者保存一个
nil

另一个选项是执行类似于指定初始值设定项模式的操作,如下所示:

class Person {

    func doSomething(name: String, age: String, gender: String?) {
        // do something with these informations
    }

    func doSomething(name: String, age: String) {
        self.doSomething(name, age: age, gender: nil)
    }

}
然后,您可以ommit最后一个参数,因为您的方法将调用指定的方法作为返回

class Person {

    func doSomething(name: String, age: String, gender: String?) {
        // do something with these informations
    }

    func doSomething(name: String, age: String) {
        self.doSomething(name, age: age, gender: nil)
    }

}