Согласно руководству Apple Swift, когда у вас есть следующий массив и следующая функция для поиска в массиве:
let namesArray = ["John", "Lisa", "Bill", "Jennifer"]
// Note this function is set-up to return an OPTIONAL Int:
func findName (personName:String, arrayToSearchIn:String[]) -> Int? {
for (indexOfName, nameValue) in enumerate(arrayToSearchIn) {
if nameValue == personName {
return indexOfName
}
}
return nil
}
... так что вы можете захватить необязательный Int, возвращаемый этой функцией, а затем проверить, является ли он nil
или нет - следующим образом:
let nameIndex: Int? = findName("Lisa", arrayToSearchIn: namesArray)
if nameIndex {
println("found \(namesArray[nameIndex!])")
}
else {
println("NOT found")
}
Это все хорошо, но их следующий пример, в котором они оптимизируют код, объединяя 2 оператора в один, сбивает меня с толку, потому что они внезапно пропускают необязательный "?" и "!" из их синтаксиса:
if let nameIndex = findName("Lisa", arrayToSearchIn: namesArray) {
println("found \(namesArray[nameIndex])")
}
И это отлично работает.
Так почему же в первом примере nameIndex
было объявлено с "?" - вот так:
nameIndex:Int?
и принудительная распаковка происходит с использованием "!"
[nameIndex!]
но во втором примере ни "?" или "!" один используется в синтаксисе?