Неявное развертывание опций в Array.first - PullRequest
0 голосов
/ 05 марта 2019

Напомним, что метод Array first возвращает необязательный параметр.Следующее предупреждение дает предупреждение о том, что оно неявно приводило к необязательности, поэтому, предположительно, это плохая практика:

let names = ["Bob", "Alice"]
let x = names.first 
print(x)
// Warning: Expression implicitly coerced from 'String?' to 'Any'

Однако упрощение примера в документации Apple Swift для замыканий делаетвнешне эквивалентная вещь, и не вызывает никаких предупреждений.

var closures: [() -> Void] = []

closures.append {print("Hello from the first closure in the list!")}
closures.append {print("Hello from the second closure in the list!")}

// Implicitly coerce the closure
closures.first?()

// Printed: Hello from the first closure in the list!

Разве это не "одно и то же", за исключением того факта, что один является необязательной строкой, а другой - необязательным закрытием?Поскольку он находится в официальных документах Swift и не вызывает каких-либо ошибок, я уверен, что это нормальное использование.Чего мне не хватает?

Редактировать: Спасибо за ответы!Я думаю, я понял это сейчас.Пример, подобный первому, будет больше похож на:

var closures: [() -> String] = []

closures.append {"Hello from the first closure in the list!"}
print(closures.first?())

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...