关于如何/ 自我,有一个类似的问题,可以回答,但是我想知道如何使用“自我”而不会由于以下原因导致向右漂移:weakify``strongify``if let
weakify``strongify``if let
Welcome to Apple Swift version 2.0 (700.0.59 700.0.72). Type :help for assistance. 2> import Foundation 3> class Foo { 4. func guardOptSelf() -> () throws -> Void { 5. return { [weak self] in 6. guard let self = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) } 7. self.doSomethingNonOptionalSelf() 8. } 9. } 10. } repl.swift:6:19: error: pattern matching in a condition requires the 'case' keyword guard let self = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) } ^ case repl.swift:6:23: error: binary operator '~=' cannot be applied to two 'Foo?' operands guard let self = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) }
你 可以 影子self; 您只需要反引号即可表明“您知道自己在做什么”。例如:
self
foo.doSomethingAsyncWithBar(bar) { [weak self] result in guard let `self` = self else { return } self.receivedResult(result) }
或者,在您的示例中:
2> import Foundation 3> class Foo { 4. func guardOptSelf() -> () throws -> Void { 5. return { [weak self] in 6. guard let `self` = self else { throw NSError(domain: "I was destroyed!", code: 1, userInfo: nil) } 7. self.doSomethingNonOptionalSelf() 8. } 9. } 10. }