LoginSignup
3
1

More than 3 years have passed since last update.

"Reference to property '(property name)' in closure requires explicit 'self.' to make capture semantics explicit"でコンパイルエラーになる 

Posted at

あるあるだと思うのですが。。。

Class Map 

    var image = UIImage()
    let url = "https://〜"
    let overlay = MKTileOverlay(urlTemplate: url)

     overlay.loadTile(at: path!) { (Data, Error) in            
        image = UIImage(data: Data!)!    //!!Error!!
        return
    }

こんな書き方をすると、

"Reference to property 'image' in closure requires explicit 'self.' to make capture semantics explicit"

と怒られてしまいます。
修正方法は簡単で、Xcodeに言われるがまま、怒られた変数にselfをつければいいです

Class Map 

    var image = UIImage()
    let url = "https://〜"
    let overlay = MKTileOverlay(urlTemplate: url)

     overlay.loadTile(at: path!) { (Data, Error) in            
        self.image = UIImage(data: Data!)!    //OK
        return
    }

で、これは何が怒られているかというと、クロージャの中で変数の参照を持つため、
循環参照になっていないか意識させるために、Swiftの文法上Selfの指定が必須になっています。

loadTile(at:result:) についてはこちら

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1