LoginSignup
4
1

More than 1 year has passed since last update.

Xcode13から出るConditional downcast from 'String?' to 'String' does nothingについて

Posted at

Xcode-13.0 Swift-5.5 iOS-15.0

はじめに

Xcode13 で以下のような不思議な警告が出るようになってたので共有しときます(原因わかる方いたらぜひ教えて下さい:bow:)。

Conditional downcast from 'String?' to 'String' does nothing

hoge

現象

やっていることは hoge?.first という String?? から String? にしているだけです。

let hoge: [String?]? = ["hoge"]
let fuga = hoge?.first as? String
print(fuga!)

こちらのコードは Xcode12.5.1 では警告が出ないですが Xcode13.0 だと警告が出るようになっていました。

対応

とりあえず下記のように書くと警告は出ませんでした。

  • パターン1

    let hoge: [String?]? = ["hoge"]
    let foo = hoge?.first
    let piyo = foo as? String
    print(piyo!)
    
  • パターン2

    let hoge: [String?]? = ["hoge"]
    let fuga = hoge?.first ?? nil
    print(fuga!)
    
  • パターン3

    let hoge: [String?]? = ["hoge"]
    let fuga = hoge?.first?.flatMap { $0 }
    print(fuga!)
    

不思議なのは警告がパターン1の foo as? String では出ないけど hoge?.first as? String で出ること(なんでだろう:thinking:)。

piyo

おわりに

けっきょく原因はわかりませんでしたがなんか不思議だなあということで記事にしてみました。

なんかわかる方いればぜひ教えて下さい:bow:

Xcode のバージョンアップで今まで問題なかった書き方に警告が出るのはわりとよくある:upside_down:

4
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1