[Swift]Any型に代入したOptional型の値をアンラップできない?

作りたいアプリがあって、3週間前からポチポチとSwiftを書いてまして、Optional型のメンバを持つ型に対してreflectをかけたあとでかるくハマったので、メモ代わりに書いておこうかと。

Swift 1.2
Xcode 6.3
で試しています。

以下のように、Any型の変数にStringを代入した場合、キャストすればそのまま取得できますが、

(コードは Quick/Nimble のSpecとして書いてます)

Any型にString?を代入した場合は、なぜかうまくアンラップすることができません。

これだと明示的にAnyにOptional型の値を代入しなければよいですよね、ってなるんですが、自分の場合は、以下のMirrorTypeでメンバーにアクセスした際に発生しました。

というクラスがあった場合に、reflect関数を使って、以下のようにメンバーにアクセスします。

なんとなくバグっぽい気がしますが、調べてみるとやはりstackoverflowにも上がってました。

How to unwrap an optional value from Any type? (2015年1月ごろの投稿です)

対応策はあまり大したものがなくて、

  1. Anyに拡張メソッドとしてアンラップした値を返却させる処理を追加する
  2. reflect関数とMirrorTypeを使ってAny型の変数からvalueを取り出す

といったところです。

また忘れた頃にハマりそうな予感がします・・

コメントを残す

メールアドレスが公開されることはありません。