[追記] コメント欄で頂いた様に、playground 以外では正常に動作する事から、playground のバグの可能性が高そうです。
落ちないケース
class Foo {
var array :String[]
init() {
array = ["bar"]
}
}
var foo :Foo? = Foo() // {["bar"]}
落ちるケース
class Foo {
var dict = Dictionary<String, String>()
init() {
dict = ["bar":"baz"]
}
}
var foo :Foo? = Foo() // {["bar", "baz"]}
以下の条件で必ず落ちる
- プロパティに Dictionary を持つ
- 生成したクラスを代入する変数の型を、
クラス型 + ? (OptionalValue)
とする
経緯
abstract factory パターンを実装していて、factoryメソッドが nil
もしくは Fooクラスを返却するという処理を書いており、factoryメソッドの戻り型を Foo?
と定義した。上記例は余計なロジックを排除した再現コード。
疑問
そもそもクラスに ?
を付ける方法が適切かどうかが確認できていないが、warning も出ないし、プロパティがディクショナリ以外であれば問題無く動作する。ディクショナリのみ落ちるロジックが知りたい。
どなたか説明付く方ご教示頂ければ幸いです。