Swift で enum を扱う際にハマった問題です。確認は Xcode6 beta4 で行っています。
Swift の enum は AnyObject 型変数に代入できない
Swift では enum を AnyObject 型の変数に入れることができません。コンパイルエラーになります。Any 型なら代入できます。
1 2 3 4 5 6 7 8 9 10 11 |
|
Swift の enum は AnyObject protocol を実装していないので、AnyObject 型の変数に入れることが出来ません。
ReactiveCocoa とかと組み合わせるときにこまる
これの何が不便かというと、enum は UIKit でよく使われていて、ReactiveCocoa を Swift で使う際に
enum で設定する例えば UITableViewCellAccessoryType なんかを使いたい場合にコンパイルエラーになってしまいます。
1 2 3 4 5 6 7 8 9 |
|
既存の Objective-C ライブラリで id が使われている箇所が、Swift では AnyObject に対応するので、
Closure 等で id を引数に取ったり、id を戻り値にしていたりする箇所が AnyObject になってしまい、
enum を利用することができません。
変数に代入するだけなら Any 型にすればいいんですが、既存ライブラリとの連携では難しそうです。 1
これ、何かやり方ないんでしょうかね。。ReactiveSwift 待ちかなぁ
-
Any 型にすれば代入できることを @takabosoft さんに教えてもらいました。ありがとうございます!↩
