web-dev-qa-db-ja.com

Swift 3:「UIView?」からAnyに暗黙的に強制される式

IOSプロジェクトをSwift 3に変換している間(または後)に、このメッセージを他の誰かが受け取ったに違いありません。

とにかく、Swift 3に変換した後、約30の警告があります。

「UIView?」から暗黙的に強制された表現に

ただし、警告は特定のコード行を指すものではありません。警告が存在するクラスのみを参照します。
誰かがこの警告についての洞察を持っていますか?

52
RyJ

私の場合、明示的なタイプのない辞書に関連する問題でした:

let dict = ["key": value]

タイプを指定して解決したより:

let dict: [String: Any] = ["key": value]

あなたの場合、値のタイプを指定できます:

let dict: [String: UIView] = ["key": value]
35
Madson Cardoso

これは、呼び出す関数にAny型のパラメーターがあり、オプションを渡す場合に発生します。

例えば:

let color: UIColor? = UIColor.red
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color], for: .normal)

colorIColor?タイプであり、setTitleTextAttributesタイプ[String:Any]?の辞書が必要です。

警告を回避するには、オプションのラップを強制的に解除するか、Anyにキャストする必要があります。

UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color!], for: .normal)

または

UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color as Any], for: .normal)
30

Swiftコンパイラのバグのように見えます:

https://bugs.Swift.org/browse/SR-2921

現在、Xcode 8.1および8.2 beta 1でこの問題が発生しています。

あなたの場合、警告はソースファイルを識別しますが、行ではありません-あなたが述べたように。 Anyパラメーターを持つ関数の呼び出しを探し回る必要があります。

良い点は、今後のSwiftツールチェーンで修正されたように見えることです。

これはXcode 8.3ベータ1で修正されたと思われます(ただし確認されていません)

15
Daniel

問題

予想されるタイプはAnyですが、提供されるタイプはUIView?

問題はoptionalにあり、UIViewのインスタンスが渡され、動作することを確認してください。

0
user1046037