2

クラス (MyArray) 内のプライベート配列 (arr) にアクセスしようとすると、エラー メッセージが表示されます。私が達成しようとしているのは、配列の内容を逆にするためのクロージャーを作成することです。このクロージャーは、インスタンス変数を使用してクラスの外部から呼び出すことができます。このエラーを理解できません。誰か助けてください!!

public class MyArray {
private var arr: [Int] = []
internal static var instance: MyArray?

public var reverse = { () -> [Int] in
        var returnArray : [Int] = []
        var counter = arr.count - 1 // Error: Instance member 'arr' cannot be used on type 'MyArray'

        for _ in (0...arr.count - 1) { // Error: Instance member 'arr' cannot be used on type 'MyArray'
            returnArray.append(arr[counter])
            counter -= 1
        }
        return returnArray
}

private init() {}

public static func getInstance() -> MyArray {
    if self.instance == nil {
        self.instance = MyArray()
    }
    return self.instance!
}
}
4

1 に答える 1

2

遅延プロパティを使用して、クロージャーの外部で宣言された変数にアクセスできるようにします。

すっごく...

•これpublic var reverse =をこれに変更public lazy var reverse =

self.• 次に、クロージャーの外側で定義されたすべての変数の前に追加します。

これを読んでください:レイジープロパティを理解してください

怠惰なルール:

let で lazy を使用することはできません。

計算されたプロパティでは使用できません。

計算されたプロパティは、計算ブロック内でコードを実行した後、それにアクセスしようとするたびに値を返すためです。

lazy は、 struct および class のメンバーでのみ使用できます。

遅延変数はアトミックに初期化されないため、スレッドセーフではありません。

于 2018-05-11T06:09:04.427 に答える