1. ホーム
  2. スイフト

[解決済み】Swiftで弱参照の配列を宣言するには?

2022-04-12 17:58:20

質問

Swiftで弱参照の配列を保存したいのですが、どうすればいいですか?配列自体は弱参照であってはならず、その要素はそうであるべきです。私はCocoaを考える NSPointerArray は、これの非タイプセーフ版を提供しています。

解決方法は?

として、汎用ラッパーを作成します。

class Weak<T: AnyObject> {
  weak var value : T?
  init (value: T) {
    self.value = value
  }
}

このクラスのインスタンスを配列に追加します。

class Stuff {}
var weakly : [Weak<Stuff>] = [Weak(value: Stuff()), Weak(value: Stuff())]

を定義する場合 Weak のどちらかを使用することができます。 struct または class .

また、配列の内容を刈り取るのに役立つように、次のようなこともできます。

extension Array where Element:Weak<AnyObject> {
  mutating func reap () {
    self = self.filter { nil != $0.value }
  }
}

の使用は AnyObject に置き換える必要があります。 T - が、現在のSwift言語では、そのように定義された拡張子は許されないと思います。