Swift 3: Выражение, неявно принудительное из UIView? любому
Кто-то еще должен был получить это сообщение, пока (или после) конвертирует проект iOS в Swift 3, но когда я выполняю поиск Google, я не получаю соответствующих результатов.
В любом случае, после преобразования в Swift 3 у меня есть около 30 предупреждений, которые говорят:
Выражение, неявно принудительное из UIView? к любому
Но предупреждения не указывают на какую-либо конкретную строку кода. Они ссылаются только на класс, где существует предупреждение.
Кто-нибудь имеет представление об этом предупреждении или о том, как я могу заставить их замолчать?
Ответы
Ответ 1
В моем случае это была проблема, связанная со словарем без явного типа:
let dict = ["key": value]
Чем я решил указать тип:
let dict: [String: Any] = ["key": value]
В вашем случае вы можете указать свой тип значения:
let dict: [String: UIView] = ["key": value]
Ответ 2
Это произойдет, когда функция, которую вы вызываете, имеет параметр типа Любые, и вы передаете необязательный.
Например:
let color: UIColor? = UIColor.red
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color], for: .normal)
Обратите внимание, что цвет имеет тип UIColor? и что setTitleTextAttributes ожидает словарь типа [String: Any]?.
Чтобы избежать предупреждения, вам нужно либо принудительно развернуть свой вариант, либо передать его в "Любой".
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color!], for: .normal)
или
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color as Any], for: .normal)
Ответ 3
Похож на ошибку в компиляторе Swift:
https://bugs.swift.org/browse/SR-2921
В настоящее время я вижу это с Xcode 8.1 и 8.2 beta 1.
В вашем случае предупреждение должно идентифицировать исходный файл, но не строку - как вы сказали. Вам нужно будет искать вызовы функций с параметрами Any
.
Хорошо, что он кажется исправленным в предстоящей инструментальной цепочке Swift.
Я считаю, что это исправлено в Xcode 8.3 beta 1 (но не подтверждено)