0
一般的なデータ構造で弱い参照を使いたいと思っています。例えば、配列の下の の例では、一般的に任意のジェネリック型です。私はほとんどそれが :(プロトコルとしてタイプされたSwift汎用データ構造で弱い参照を使用するにはどうすればよいですか?
私の実験がうまくスタートを切った仕事を得ることができます。以下の作品:私は配列をしたいとき
// Array of weak references that implements a protocol OK
protocol P: AnyObject { // Note AnyObject
var i: Int { get }
}
class CP: P {
var i: Int = 0
}
let cP = CP() // Strong reference to prevent collection
let weakCPs = [WeakReference(value: cP)] // OK
print("CP: \(weakCPs[0].value!.i)") // 0
しかし:私は、プロトコルを追加することができます
// Array of weak references OK
struct WeakReference<T: AnyObject> {
weak var value: T?
}
class C {
var i: Int = 0
}
let c = C() // Strong reference to prevent collection
let weakCs = [WeakReference(value: c)] // OK
print("C: \(weakCs[0].value!.i)") // 0
私はエラーを取得するプロトコルへの弱参照の:
// Array of weak references of a protocol not OK
let weakPs: [WeakReference<P>] = [WeakReference(value: cP)] // Using 'P' as
a concrete type conforming to protocol 'AnyObject' is not supported
print("P: \(weakPs[0].value!.i)") // 0
私は、HA何かがありますお見逃しですか?
'AnyObject'に準拠した具体的な型として 'P'を使用するとエラーメッセージ "AnyObject 'はサポートされていません。これはコンパイラの の一時的な制限であることを示しています。これは修正される予定ですか?私はバグレポートを提出すべきですか?何かアドバイスを事前に
おかげで、
- ハワード。
// Array of weak references of a protocol OK so long as protocol marked @objc
@objc protocol P { // Note @objc
var i: Int { get }
}
class CP: P {
var i: Int = 0
}
let weakPs: [WeakReference<P>] = [WeakReference(value: cP)] // Note typed as `[WeakReference<P>]`
print("P: \(weakPs[0].value!.i)") // 0
作品は:)
あなたが@objc使用する必要があり、したがって、ない純粋スウィフトソリューションが、私はiOS版の午前以来ではないことを迷惑です:私の周りに遊ぶ