Необязательный параметр по умолчанию в Swift

У меня есть функция с параметрами по умолчанию в swift

func test(string: String = "", middleString: String = "", endString: String = "") -> Void {
  // do stuff
}

Я хочу передать переменные, которые будут необязательными строками

let string: String? // 
let middleString: String?
let endString: String?

Как сделать так, чтобы, если параметры равны нулю, используйте параметры по умолчанию. Если нет, то используйте значения внутри опций

test(string, middleString: middleString, endString: endString)

Ответы

Ответ 1

Вам нужно будет использовать необязательные строки String? в качестве типа вашего аргумента со значениями по умолчанию nil. Затем, когда вы вызываете свою функцию, вы можете указать строку или оставить этот аргумент.

func test(string: String? = nil, middleString: String? = nil, endString: String? = nil) -> Void {
    let s = string ?? ""
    let mS = middleString ?? ""
    let eS = endString ?? ""
    // do stuff with s, mS, and eS, which are all guaranteed to be Strings
}

Внутри вашей функции вам нужно будет проверить каждый аргумент для nil и заменить его значением по умолчанию. Использование оператора ?? делает это проще.

Затем вы можете вызвать свою функцию, предоставив все аргументы, аргументы или только те, которые вы хотите включить:

test(string: "foo", middleString: "bar", endString: "baz")
test()
test(string: "hello", endString: "world")

Ответ 2

Попробуйте следующее:

 test(string: string ?? "", middleString: middleString ?? "", endString: endString ?? "")

Ответ 3

Swift 3

Я написал это вот так:

test(string: String? = "", middleString: String? = "", endString: String? = "") {
}

таким образом вы можете вызвать test() с аргументами или без них и получить свои значения по умолчанию, если параметр не указан

Ответ 4

Примечание. Не интерпретируйте эти необязательные параметры как ?, это другой подход.

Полностью необязательные параметры, т.е. даже не использовать метод вызова.

func doAddition(value1Name value1:Int = 0, value2Name value2:Int = 0, value3Name value3:Int = 0){
    print(value1+value2+value3)
}

Теперь все параметры необязательны для добавления. звоните, как вам нравится,

doAddition(value1Name: 1)
doAddition(value1Name: 1, value2Name: 2)
doAddition(value3Name: 3)