2017-04-13 5 views
0

私はしばらくMacOSプロジェクトでSwiftのアウトレットコレクションを使用しようとしてきましたが、これは現時点では不可能であることを学んだだけです。私はまだ困惑しているのですが、これはある時点で修正されていると推測しています。Swift IBOutletのコレクションとサイクルの安全性を維持

私はコンセントは一般のサイクルを保持防ぐために、「根」コンセントを除き、弱いでなければならないことを理解する:

@IBOutlet weak var someButton: NSButton! 

しかし、私はコレクションの構文については、発見した例が弱い修飾子を含みません、と私は(1)理にかなっていること、それを置く場所を発見していない、および(2)赤い旗を得ることはありません。

@IBOutlet var severalButtons: [NSButton]! 

だから、私は明らかに何かが足りないのですか?そのようなコンセントのコレクションが保持サイクルを作成しないと確信できますか?

+0

アウトレットを「弱い」ものにする理由はなく、リファレンスサイクルを作成していません。 – Sulthan

答えて

1

IBOutletCollectionは、IBActionIBOutletと異なり、引数としてクラス名をとります。最上位のオブジェクトとして、IBOutletCollectionを強く宣言する必要があります。これは、より詳細にはhereで説明されています。

したがって、この制限により、IBOutletCollectionは保持サイクルを作成する可能性があります。

+0

私は同じページにいると思います。コレクション自体に強い参照が必要であることを理解しています。コレクション配列内の強い参照が注意を払わないと問題につながる可能性があるという私の疑念を確認しています。しかし、私の場合、コレクションは所有されます(MacOSのため、現時点では架空です)。したがって、インタフェース内の所有権はもはや単純なツリーではなく、有向非循環グラフです。しかし、オーナーシップはまだ「非周期的」なので、私は大丈夫だと思います。 –

+0

@JeffJ嬉しいです。それでは、あなたはどんな答えを探していますか? –

+0

現時点で可能な限りあなたは私に答えてきたと思います。コレクションのSwift構文が弱いアウトレット参照を設定する可能性を考慮していないように見えるので、私は何かが欠けていたことを心配していました。 MacOSプロジェクトでIBがコレクションの存在を認識していないように見えるのはなぜですか?私はiOSプロジェクトでうまくいくと言われていますが、そうでなければ、ありがとう。 –

関連する問題