Help us understand the problem. What is going on with this article?

class 初期化時に特定の条件でクラッシュ

More than 5 years have passed since last update.

[追記] コメント欄で頂いた様に、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 も出ないし、プロパティがディクショナリ以外であれば問題無く動作する。ディクショナリのみ落ちるロジックが知りたい。

どなたか説明付く方ご教示頂ければ幸いです。

taketin
最近は iOSアプリケーション をメインに開発しています
https://github.com/taketin
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした