Edited at

guard let `self` = self ... を使おうとしているそこの貴方!ちょっとお待ちください!


20181106追記

4.2でimplementedになったようです

https://github.com/apple/swift-evolution/blob/master/proposals/0079-upgrade-self-from-weak-to-strong.md

このような書き方ができるようになりました


{ [weak self] response in
guard let self = self else {
return
}
self.reload(response)
}


↓は4.1以前の内容


weak self参照を↓のようにアンラップするパターンが多いかと思いますが


{ [weak self] response in
guard let `self` = self else {
return
}
self.reload(response)
}

これができてしまうのはバグだそうです

https://github.com/apple/swift-evolution/blob/master/proposals/0079-upgrade-self-from-weak-to-strong.md


AppleのChris Lattnerは「これはコンパイラのバグです」と述べています。

https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160118/007425.html


self を使ってしまうと、このバグが修正されて使えなくなったとき、どこを直せばいいのかわかりにくいので、 strongSelf, me, などなどわかりやすい別名を使ったほうが良さそうです