Когда я установил firstThing
значение по умолчанию, nil
это будет работать, без значения по умолчанию nil
я получаю сообщение об ошибке при вызове функции.
Печатая, Int?
я подумал, что он стал необязательным со значением по умолчанию nil
, я прав? И если да, то почему не работает без = nil
?
func test(firstThing: Int? = nil) {
if firstThing != nil {
print(firstThing!)
}
print("done")
}
test()
func test(firstThing: Int = 4)
: неOptional
параметр со значением по умолчанию.Optional
Тип (который является то , что?
в имени типа расширяется в) представляет собой тип значения; «необязательный параметр» - неудачное имя для параметра, который может присутствовать или не присутствовать при вызове функции, независимо от его типа.Ответы:
Опции и параметры по умолчанию - это разные вещи.
Необязательный параметр - это переменная, которая может быть
nil
, вот и все.Параметры по умолчанию используют значение по умолчанию, когда вы опускаете этот параметр, это значение по умолчанию указывается следующим образом:
func test(param: Int = 0)
Если вы указываете параметр, который является необязательным, вы должны предоставить его, даже если значение, которое вы хотите передать, равно
nil
. Если ваша функция выглядит такfunc test(param: Int?)
, вы не можете называть ее такtest()
. Несмотря на то, что параметр является необязательным, у него нет значения по умолчанию.Кроме того, можно объединить два и иметь параметр , который принимает необязательный , где
nil
это значение по умолчанию, например:func test(param: Int? = nil)
.источник
Аргумент по умолчанию позволяет вызывать функцию без передачи аргумента. Если вы не передадите аргумент, будет предоставлен аргумент по умолчанию. Итак, используя ваш код, это ...
... точно так же, как это:
Если вы оставите такой аргумент по умолчанию ...
... тогда ты больше не сможешь этого делать ...
Если вы это сделаете, вы получите описанную вами ошибку «отсутствует аргумент». Вы должны передавать аргумент каждый раз, даже если это справедливый аргумент
nil
:источник
Swift не похож на языки вроде JavaScript, где вы можете вызывать функцию без передачи параметров, и она все равно будет вызываться. Итак, чтобы вызвать функцию в Swift, вам нужно присвоить значение ее параметрам.
Значения по умолчанию для параметров позволяют присваивать значение без его указания при вызове функции. Вот почему
test()
работает, когда вы указываете значение по умолчанию в объявлении теста.Если вы не включили это значение по умолчанию, вам необходимо указать значение при вызове:
test(nil)
.Кроме того, и это не имеет прямого отношения к этому вопросу, но, вероятно, стоит отметить, что вы используете способ «C ++» работать с возможно нулевыми указателями для работы с возможными нулевыми опциями в Swift. Следующий код более безопасен (особенно в многопоточном ПО) и позволяет избежать принудительного развертывания необязательного:
источник
Вы путаетесь
Optional
со значением по умолчанию. AnOptional
принимает значение или ноль. Наличие значения по умолчанию позволяет опустить аргумент при вызове функции. Аргумент может иметь значение по умолчанию сOptional
типом или без него .Примеры вызовов с выводом:
Подвести итоги:
Optional
может иметь значение nil или может содержать экземпляр типаOptional
и имеют значение по умолчанию, то его можно опустить при вызове функции ИЛИ может быть включено и может быть предоставлено значение nil (например, param1: nil)источник
func getFilterNames(name: inout String){ }
что позволит вам изменить переданное имя.если вам нужно использовать параметр bool, вам нужно просто назначить значение по умолчанию.
тогда вы можете использовать без параметра или с параметром:
источник
«Необязательный параметр» означает «тип этого параметра необязательный». Это не означает: «Этот параметр является необязательным и, следовательно, может игнорироваться при вызове функции».
Термин «необязательный параметр» сбивает с толку. Чтобы уточнить, точнее будет сказать «необязательный параметр типа» вместо «необязательный параметр», поскольку слово «необязательный» здесь предназначено только для описания типа значения параметра и ничего больше.
источник
Если вы хотите иметь возможность вызывать
func
с параметром или без него, вы можете создать второйfunc
с тем же именем, который вызывает другой.теперь вы можете вызывать функцию с именем
test
без параметра или без него.источник
Это немного сложно, когда вы пытаетесь объединить необязательный параметр и значение по умолчанию для этого параметра. Как это,
Это две совершенно противоположные идеи. Когда у вас есть необязательный параметр типа, но вы также предоставляете ему значение по умолчанию, теперь он больше не является необязательным типом, поскольку он имеет значение по умолчанию. Даже если по умолчанию установлено значение nil, swift просто удаляет необязательную привязку без проверки значения по умолчанию.
Поэтому всегда лучше не использовать nil в качестве значения по умолчанию.
источник
nil
).var foo: String; print(foo)
). Но аргумент функции со значением по умолчанию является необязательным аргументом (вам не нужно передавать его при вызове функции), и он также может быть необязательного типа (позволяяnil
назначать ему значение по умолчанию).Значение по умолчанию не означает значение по умолчанию для типа данных. Здесь значение по умолчанию - среднее значение, определенное во время определения функции. мы должны объявить значение переменной по умолчанию при определении переменной в функции.
источник