2016-08-26 13 views
2

私はSwift言語を使用しています。 私はviewcontrollerクラスに属しています。別のクラスに何かを保存したいのですが、そのクラスにクラスへの強いポインタを持たせたくありません。だから私はweakを使用しています。私はこれを行う2つの方法を試みています。一つの作品(私のViewControllerクラスへの強いポインタを持っていないで成功したように)、および1つは(私のViewControllerへのポインタは、私がweakとしてそれを名前を付けていても、強いものではない。弱いvarと2つのクラス間のポインタの問題

class MyViewController { 

    override func viewDidLoad() { 
    someOtherClass.function(someArgument) { [ weak myself = self ] in 
    myself?.someButton.text = "I got you captured, Mr. ViewController" 
} 

前のコード私のViewControllerクラスに強く、この例では

class MyViewController { 

override func viewDidLoad() { 
    someOtherClass.function(someArgument) { 
    weak let myself = self 
    myself?.someButton.text = "I got you captured, Mr. ViewController" 
} 

、someOtherClassポイント誰もが理由を知っている:。それから私はこのように、関数自体でweak myself = selfと名前を取り出し強くMyViewControllerにsomeOtherClassポイントをさせないことに成功しましたか。?

}

+0

すばやく3回編集すると申し訳ありません。たくさんのものを修正しなければならなかったのですか? – BossGiveMeArrays

+0

弱い参照にしたいのであれば、なぜ自分ではなく自分自身を持っていますか?弱いということは、いつでもどこでも行けないことを意味します。 – Putz1103

+0

あなたはそうです。それを私が直した。しかし、それはまだ私のViewControllerを強く指している – BossGiveMeArrays

答えて

1

これはすべて変数作成の範囲です。最初の例では、ViewControllerクラスのスコープ内に新しい変数(weak myself)を作成しています。次に、その弱い変数を新しいクラスの関数に渡し、あなたが望むものを何でもします。

2番目の例では、新しいクラスのスコープ内の関数内に新しい変数(weak myself)を作成しています。この変数は、新しいクラスの中で強い参照先のselfを使用して作成するので、新しいクラスの中のViewControllerに対する強い参照があります。