рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрди рджрд┐рдиреЛрдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
lazy var locationManager: CLLocationManager = {
let manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.delegate = self
manager.requestAlwaysAuthorization()
return manager
}()
рдореИрдВрдиреЗ рдЗрд╕реЗ UILabels
рдФрд░ рдРрд╕реЗ рднреА рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрд╛ рд╣реИред рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЛ рдПрдХ рдЖрд╕рд╛рди рдЬрдЧрд╣ рдкрд░ рд░рдЦрдиреЗ рдХрд╛ рдпрд╣ рдлрд╛рдпрджрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдореЗрдВ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдХреНрдпрд╛ рд╕реНрд╡рдпрдВ рдЪрдХреНрд░реАрдп рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ [unowned self]
рдпрд╛ [weak self]
рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдПрдХ рдкреНрд░рд╢реНрди рднреА рд╣реИ:
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдордЬрдмреВрдд рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╛рдо рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЗ рдЧрд╛рдЗрдб рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ:
if let strongSelf = self {
}
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рдпрдВ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рднреА locationManager
рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдХрднреА рднреА locationManager
рдкрд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмрдВрдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛ рдкрдХрдбрд╝ рдХрд░ рд░рдЦ рд╕рдХрддрд╛ рд╣реИред рджрд┐рд▓рдЪрд╕реНрдкред :-)
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдмрд╕ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рдмрдВрдж рдореЗрдВ рд╕реНрд╡рдпрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ locationManager
рдкрд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдХреНрд▓реЛрдЬрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдпрд╣ рддреБрд░рдВрдд рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╡реИрд╕реЗ, !
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
lazy var locationManager: CLLocationManager = {
рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ !
рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдХреЛрдб рдмреНрд▓реЙрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╣рдореЗрдВ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдЕрдкрдиреЗ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдореЗрдВ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВ?
рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред рдпрд╣ рдЪреАрдЬрд╝ рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЪреАрдЬрд╝ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдХрд░реАрдм рд░рдЦрддрд╛ рд╣реИред рдирддреАрдЬрддрди, viewDidLoad()
рдЫреЛрдЯрд╛ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рднреА рдкрд╕рдВрдж рд╣реИред рдореИрдВ
рдпрджрд┐ рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рддреЛ [unowned self]
рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ:
lazy var locationManager: CLLocationManager = {
[unowned self] in
let manager = CLLocationManager()
manager.delegate = self
...
return manager
}()
рдореБрдЭреЗ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреБрдЫ рд╣рдж рддрдХ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╕реВрдХреНрд╖реНрдо рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ (рдЬреИрд╕реЗ рдордЬрдмреВрдд рдмрдирд╛рдП рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдЪрдХреНрд░реЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛)?
(рд╕рдВрджрд░реНрдн: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID57)
рдЖрдИрдПрдордУ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкреИрдЯрд░реНрди рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рд╕реНрд╡рд┐рдлреНрдЯ-рдкреИрдЯрд░реНрди рд░реЗрдкреЛ рдореЗрдВ рд╣реИред рдЪрдХреНрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрд╣ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА CLLocationManager рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрдЯрдл рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдердб рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреИрдЯрд░реНрди рдЖрдо рддреМрд░ рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рдВрдкрддреНрддрд┐ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, CLLocationManager рдХреЗ рднреАрддрд░) рдХреЛ рдХрдордЬреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдирд╣реАрдВ?
рдореЗрд░реА рдЧрд▓рддреА рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рдЪрдХреНрд░ рдмрдирд╛рдП рд░рдЦрддреА рд╣реИред рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрдВрдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ [unowned self]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрдВрдж рд╡рд░реНрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдЧреБрдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрд┐ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ (рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдпрд╣ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛ред рдпрджрд┐ var рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рддреЛ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ http://mikebuss.com/2014/06/22/lazy-initialization-swift/ рд╕реЗ рджреЗрдЦреЗрдВ
class Person {
var name: String
lazy var personalizedGreeting: String = {
[unowned self] in
return "Hello, \(self.name)!"
}()
init(name: String) {
self.name = name
}
}
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ:
let p = Person(name: "sam")
p.personalizedGreeting
// => "Hello, sam!"
p.name = "definitely somebody else"
p.personalizedGreeting
// => "Hello, sam!"
рдЗрд╕ рд╕рд╛рд░реА рд╣рд▓рдЪрд▓ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреИрдЯрд░реНрди рд╣реИ, рдФрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдордЭреЗрдВ рддрд╛рдХрд┐ рдпреЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрдЯрд┐рд▓ рдЧрд▓рддрд┐рдпрд╛рдБ рди рд╣реЛрдВред
/ рдореИрдВ рдЕрдм рдЪреБрдк рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛
Apple рдбреЙрдХреНрд╕ рдореЗрдВ рдЬреЛ @sammyd рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ, Apple рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрддрд╛ рд╣реИ:
lazy var asHTML: () -> String = {
[unowned self] in
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
рджреВрд╕рд░реЗ рд▓рд┐рдВрдХ рдореЗрдВ @sammyd рджреЗрддрд╛ рд╣реИ (рд╡рд╣ рд▓рд┐рдВрдХ рдЖрдЬ рдЦреБрд╢ рд╣реИ:]), рд▓реЗрдЦрдХ рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрддрд╛ рд╣реИ:
lazy var personalizedGreeting: String = {
[unowned self] in
return "Hello, \(self.name)!"
}()
рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ unowned self
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрднреА рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА ... рдпрд╛рдиреА, рдЖрд▓рд╕реА рдЧреБрдг рдмрдирд╛рдиреЗ рдореЗрдВ ... рдореИрдВ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ (рдЬреИрд╕рд╛ рдХрд┐ @sammyd рдлрд┐рд░ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд▓реМрдЯ рд░рд╣рд╛ рд╣реИ рдмреНрд▓реЙрдХ, рд╢рд╛рдпрдж рдЕрдиреНрдп?) _not_ unowned
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЖрд▓рд╕реА рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ unowned
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?
рднрд▓реЗ рд╣реА, рдореИрдВ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред :+1:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ asHTML
рдЪрд░ _stores_ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдмрдВрджред рд╣рдо рдпрд╣рд╛рдВ рдЬрд┐рд╕ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░реЗрдЧреБрд▓рд░ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд░рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рдпрд╣ lazy
рдФрд░ рдЧреИрд░- lazy
рджреЛрдиреЛрдВ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рд╣реИред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред _рд╣рдореЗрд╢рд╛_ рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдкрд░рд┐рдХрд▓рд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдпрд╛ рд░рдВрдЧ рдереЗ, рддреЛ рдореИрдВ "рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ" рдХрд╛ рд▓рд╛рдн рднреА рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП viewDidLoad()
рдореЗрдВ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдорд╛рдорд▓рд╛-рджрд░-рдорд╛рдорд▓рд╛ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВрдиреЗ uilabels/textviews/рдХреЗ рд╕рдмрд╡реНрдпреВ рдХреЗ рд╕рд╛рде рд╡рд░реНрд╖реЛрдВ рд╕реЗ ui рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП initWithFrame рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЙрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдкрд░ рдЯреНрд░рд┐рдкрд┐рдВрдЧ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ - рдЦрд╛рд╕рдХрд░ рд╕реБрдкрд░ рдХреНрд▓рд╛рд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордпред
рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ? рд╢рд╛рдпрджред рдХреНрдпрд╛ рдпрд╣ uikit рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдирд┐рдм рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЬрд╛рддрд╛ рд╣реИ? рд╣рд╛рдВред рдХреНрдпрд╛ рдореИрдВ рдирд┐рдм рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдореЗрдВ рдШрдВрдЯреЛрдВ рдмрд┐рддрд╛рддрд╛ рд╣реВрдВ? рдирд╣реАрдВред рдХреНрдпрд╛ рдореЗрд░реЗ рдРрдкреНрд╕ рд╕рдордп рдкрд░ рд╢рд┐рдк рд╣реЛрддреЗ рд╣реИрдВ? рд╣рд╛рдВред рдХреНрдпрд╛ рдореИрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдБ? рдирд╣реАрдВред рдХреНрдпрд╛ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░ рд╣реИрд░рд╛рди рд╣реИрдВ? рд╢рд╛рдпрджред рдХреНрдпрд╛ рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рд╣реИ - рдирд╣реАрдВред
рд╕рд░рд▓ рдХреЛрдб = рд╕рд░рд▓ рддрд░реНрдХ - рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиред
рдХреБрдЫ рд▓реЛрдЧ рддрд░реНрдХ рджреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдпрд╛ рд╕реНрдореГрддрд┐ рдХреЗ рд▓рд┐рдП рдЬрдм рддрдХ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) - рдлрд┐рд░ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рди рдХрд░реЗрдВ (viewDidLoad / loadView рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ)ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕реНрд╡рдпрдВ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдкрд░ рдЖрд▓рд╕реА рдпреБрджреНрдзреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рдереЗред
рддреЛ рдпрд╣ рдкреВрд░реНрд╡-рдЦрд╛рд▓реА рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдХреА рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдЖрд▓рд╕реА рд╡рд░ рд▓реЙрдЧрд┐рдирд╡реАрд╕реА = {рд╡рд╛рдкрд╕реА рд▓реЙрдЧрд┐рдирд╡реАрд╕реА ()} ()
рдиреЛрдЯ - рдореИрдВрдиреЗ рдпрд╣рд╛рдВ init рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рд╣реИ - (рдХреЛрдИ xib рдлрд╛рдЗрд▓ рдирд╣реАрдВ)
required public init() {
super.init(nibName: nil, bundle: nil)
}
рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ
http://stackoverflow.com/questions/27585409/use-a-programmatically-created-uitableviewcell-subclass-in-swift/31801507#31801507
рдЗрд╕
рдХреНрд▓рд╛рд╕ рдЗрд╡реЗрдВрдЯрд╕реЗрд▓: UITableViewCell {
var eventName: UILabel = UILabel()
var eventCity: UILabel = UILabel()
var eventTime: UILabel = UILabel()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.addSubview(eventName)
self.contentView.addSubview(eventCity)
self.contentView.addSubview(eventTime)
}
override func layoutSubviews() {
super.layoutSubviews()
eventName = UILabel(frame: CGRectMake(20, 10, self.bounds.size.width - 40, 25))
eventCity = UILabel(frame: CGRectMake(0, 0, 0, 0))
eventTime = UILabel(frame: CGRectMake(0, 0, 0, 0))
}
}
рдмрдирд╛рдо
class EventCell: UITableViewCell {
lazy public var lblName = {
return UILabel (frame: CGRectMake(10, 0, self.bounds.size.width , 40))
}()
lazy public var lblCity = {
return UILabel (frame: CGRectMake(10, 40, self.bounds.size.width , 20))
}()
lazy public var lblTime = {
return UILabel (frame: CGRectMake(self.bounds.size.width - 80, 10, , 25))
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.addSubview(lblName)
self.contentView.addSubview(lblCity)
self.contentView.addSubview(lblTime)
}
}
рд▓рдЧрднрдЧ [unowned self]
рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдЪрдХреНрд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
Apple рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдКрдкрд░ @sammyd рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирдореВрдирд╛ рдХреЛрдб рдЕрдм [unowned self]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
lazy var asHTML: Void -> String = {
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдПрдХ рдирдЧреНрди self
рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрднреА рднреА рдПрдХ deinit рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
рдЕрдм рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрди рдХреНрд▓реЛрдЬрд░ рдореЗрдВ self
рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ unowned
рдпрд╛ unowned(unsafe)
рд╣реИ рдпрд╛ рдирд╣реАрдВред рдлрд┐рд░ рднреА рд╣рдореЗрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд╣рд┐рдд рд╣реИред
asHTML рдЙрджрд╛рд╣рд░рдг рдПрдХ рдХреНрд▓реЛрдЬрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрд▓реНрдпреВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдХреНрд▓реЛрдЬрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред asHTML рдорд╛рдорд▓реЗ рдореЗрдВ, [рдЕрдЬреНрдЮрд╛рдд рд╕реНрд╡рдпрдВ] рдЕрднреА рднреА рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдЪрдХреНрд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╕реНрд╡рд┐рдлреНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдпрд╣ рд╕рдм рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрд░рд┐рдХ рдЪреЗрдореНрдмрд░рд▓реЗрди, рд▓реАрдб рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ - рдЖрдИрдУрдПрд╕
рдЖрд░реНрдХрдЯрдЪ - рдРрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕реНрдЯреВрдбрд┐рдпреЛ
рдПрд░рд┐рдХ рдЪреЗрдВрдмрд░рд▓реЗрди @arctouch.com mailto:[email protected]
+1-415-944-2000
рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░реАрдп рдмреНрд░рд╛рдВрдбреЛрдВ рдФрд░ рдлреЙрд░реНрдЪреНрдпреВрди 500 . рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдРрдкреНрд╕
arctouch.com/work | рдЖрд░реНрдХрдЯрдЪ.рдХреЙрдо/рдмреНрд▓реЙрдЧ
8 рджрд┐рд╕рдВрдмрд░ 2015 рдХреЛ рд╕реБрдмрд╣ 8:18 рдмрдЬреЗ, рдЧреНрд╡реЗрдиреНрдбрд▓ рд░реВрдП рдиреЛрдЯрд┐рдлрд╝рд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
[рдЕрдЬреНрдЮрд╛рдд рд╕реНрд╡] рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрдХреНрд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдирдореВрдирд╛ рдХреЛрдб https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097 -CH20-ID57 Apple рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ @sammyd рджреНрд╡рд╛рд░рд╛ https://github.com/sammyd рдЕрдм [рдЕрдЬреНрдЮрд╛рдд рд╕реНрд╡рдпрдВ] рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг HTML: рд╢реВрдиреНрдп -> тАЛтАЛрд╕реНрдЯреНрд░рд┐рдВрдЧ = {
рдЕрдЧрд░ рдкрд╛рда рджреЗрдВ = рд╕реНрд╡рдпрдВ рдкрд╛рда {
рд╡рд╛рдкрд╕реА "<(рд╕реНрд╡рдпрдВ рдХрд╛ рдирд╛рдо)> (рдкрд╛рда) (рд╕реНрд╡рдпрдВ рдирд╛рдо)>"
} рдЕрдиреНрдпрдерд╛ {
рд╡рд╛рдкрд╕реА "<(рд╕реНрд╡рдпрдВ рдХрд╛ рдирд╛рдо) />"
}
}
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдПрдХ рдирдЧреНрди рд╕реНрд╡ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрднреА рднреА рдПрдХ deinit рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛редрдЕрдм рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЙрди рдмрдВрджреЛрдВ рдореЗрдВ рд╕реНрд╡рдпрдВ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдЕрдЬреНрдЮрд╛рдд рдпрд╛ рдЕрдЬреНрдЮрд╛рдд (рдЕрд╕реБрд░рдХреНрд╖рд┐рдд) рд╣реИ рдпрд╛ рдирд╣реАрдВред рдлрд┐рд░ рднреА рд╣рдореЗрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд╣рд┐рдд рд╣реИред
-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub https://github.com/raywenderlich/swift-style-guide/issues/88#issuecomment -162933300 рдкрд░ рджреЗрдЦреЗрдВред
@ arctouch-ericchamberlain, рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдирдореВрдирд╛ рдХреЛрдб рдЕрдм рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдлрд┐рд░ рднреА, рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, "рдореИрдВ рдХрднреА рднреА рдПрдХ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдбрд┐рдирд┐рдЯ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЬреЛ рдПрдХ рдирдЧреНрди рдЖрддреНрдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред"
рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░:
class C {
lazy var d: String = { "\(self)" }()
deinit { print("deinit") }
}
C() // deinit
C().d // deinit
рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдПрдХ рд░рд┐рдЯреЗрди рд╕рд╛рдЗрдХрд▓ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ [unowned self]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдРрд╕рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐
рдЖрд▓рд╕реА рд╡рд░ рдХреБрдЫ = {..}()
рдХреБрдЫ рднреА рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рдЬрдм рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдмрдХрд┐,
рдЖрд▓рд╕реА рд╡рд░ рдХреБрдЫ = {тАж}
рдЪрд░ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдЪрдХреНрд░ рдмрдирд╛рддрд╛ рд╣реИред
рдирдореВрдирд╛ рдХреЛрдб рдореЗрдВ asHTML рдЪрд░ рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рд╕реЗ () рдирд┐рдХрд╛рд▓реЗрдВ, рдлрд┐рд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред
рдПрд░рд┐рдХ рдЪреЗрдореНрдмрд░рд▓реЗрди, рд▓реАрдб рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ - рдЖрдИрдУрдПрд╕
рдЖрд░реНрдХрдЯрдЪ - рдРрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕реНрдЯреВрдбрд┐рдпреЛ
рдПрд░рд┐рдХ рдЪреЗрдВрдмрд░рд▓реЗрди @arctouch.com mailto:[email protected]
+1-415-944-2000
рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░реАрдп рдмреНрд░рд╛рдВрдбреЛрдВ рдФрд░ рдлреЙрд░реНрдЪреНрдпреВрди 500 . рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдРрдкреНрд╕
arctouch.com/work | рдЖрд░реНрдХрдЯрдЪ.рдХреЙрдо/рдмреНрд▓реЙрдЧ
9 рджрд┐рд╕рдВрдмрд░ 2015 рдХреЛ рджреЛрдкрд╣рд░ 2:10 рдмрдЬреЗ, рдЧреНрд╡реЗрдиреНрдбрд▓ рд░реВрдП рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
@ arctouch-ericchamberlain https://github.com/arctouch-ericchamberlain , рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рдирдореВрдирд╛ рдХреЛрдб рдЕрдм рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдХ рдХреНрд▓реЛрдЬрд░ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
рдлрд┐рд░ рднреА, рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, "рдореИрдВ рдХрднреА рднреА рдПрдХ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдбрд┐рдирд┐рдЯ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдЬреЛ рдПрдХ рдирдЧреНрди рдЖрддреНрдо рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред"
рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░:
рдХрдХреНрд╖рд╛ рд╕реА {
рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдбреА: рд╕реНрдЯреНрд░рд┐рдВрдЧ = {"(рд╕реНрд╡рдпрдВ)"}()
рджреАрдирд┐рдЯ {рдкреНрд░рд┐рдВрдЯ ("рдбреАрдирд┐рдЯ")}
}рд╕реА () // deinit
рд╕реА ()ред рдбреА // deinit
рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдПрдХ рд░рд┐рдЯреЗрди рд╕рд╛рдЗрдХрд▓ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдореБрдЭреЗ [рдЕрдЬреНрдЮрд╛рдд рд╕реНрд╡] рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub https://github.com/raywenderlich/swift-style-guide/issues/88#issuecomment -163413290 рдкрд░ рджреЗрдЦреЗрдВред
рдореИрдВ рдЖрдкрдХрд╛ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ред
рдЙрди рдЖрд▓рд╕реА рдпреБрджреНрдзреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА [unowned self]
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
lazy var d: String = { "\(self)" }()
lazy var asHTML: Void -> String = { "\(self)" }
рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддрд╛ рд╣реИ?
рдУрд╣, HTML рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдЪрдХреНрд░ рдмрдирд╛рддрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж @ arctouch-ericchamberlainред рдореБрдЭрд╕реЗ рдЧрд▓рддреА рд╣реБрдИ рд╣реИред
@groue
рдРрдкреНрдкрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ [unowned self]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ:
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, HTMLElement рд╡рд░реНрдЧ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, HTMLElement рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЗрд╕рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ asHTML рдорд╛рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓реЛрдЬрд░ рдХреЗ рдмреАрдЪ рдПрдХ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдЪрдХреНрд░ рдмрдирд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж рд╡реЗ [unowned self]
рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ:
рдПрдХ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрджрд░реНрдн рдкрд╣рд▓реЗ рд╕реЗ HTMLElement рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдордЬрдмреВрдд рд╕рдВрджрд░реНрдн рдЪрдХреНрд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХреИрдкреНрдЪрд░ рд╡рд┐рдзрд┐ рд╣реИред
рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИ:
lazy var asHTML: Void -> String = {
[unowned self] in
if let text = self.text {
return "<\(self.name)>\(text)</\(self.name)>"
} else {
return "<\(self.name) />"
}
}
рдЙрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкреГрд╖реНрда рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ рдХрд┐ рдХрдм рдЪрдХреНрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП unowned
рдпрд╛ weak
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
@ рдЬреЙрдиреНрдбрдкреЛрдк
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрдкреНрдкрд▓ рд╕реЗ рдореИрдВрдиреЗ рдЬреЛ рдирдореВрдиреЗ рджреЗрдЦреЗ рд╣реИрдВ, рд╡реЗ рд╕рд╛рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реЛрдЬрд░ рдмреНрд░реИрдХреЗрдЯ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред
class EventCell: UITableViewCell {
lazy public var lblName = UILabel(frame: CGRectZero)
lazy public var lblCity = UILabel(frame: CGRect())
lazy public var lblTime = UILabel(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
}
рдЗрд╕ рдзрд╛рд░рдгрд╛ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ рдХрд┐ lazy
рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рднреАрддрд░ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╣реИ, рдЗрд╕реЗ рдирд╛рдорд┐рдд рдЗрдирд┐рдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдк рдЖрд▓рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рднрд╛рд░реА рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрдпреЛрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирд┐рд░рд╕реНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐, рдЙрдХреНрдд рд╡рд░реНрдЧ рдХреЗ рдЖрдкрдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЗ рдмрд╛рдж, рдПрдХ рд░рд┐рд╕рд╛рд╡ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрд▓реЛрдЬрд░ рд╕реНрд╡рдпрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдЧрд╛ред
рд╣рдореЗрд╢рд╛ рдХрдордЬреЛрд░/рдЕрдЬреНрдЮрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рднрд▓реЗ рд╣реА рдЖрдк 100% рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдВ рдХрд┐ рдмрдВрдж рд╣реЛрдиреЗ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЦрд┐рд░рдХрд╛рд░, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд▓реЗрдЧрд╛ред рдмрдВрдж рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЖрд▓рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, dispatch_once(..)
рд╕реЛрдЪреЗрдВред рд╡реИрд╕реЗ рднреА, рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕реА рддрд░рд╣ рд░реЛрд▓ рдХрд░реВрдБрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдореГрддрд┐ рд╕рдВрджрд░реНрдн рдЪреАрдЬрд╝ рдХреЛ рд░рд╛рд╕реНрддреЗ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЖрд▓рд╕реА рдкрд░ рд╢реАрд░реНрд╖ рд╣рд┐рдЯ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рднреА рдЧрд▓рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЙрд╕ рдореИрдХреНрд╕рд┐рдо рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ!) рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдпрд╣ рд▓реАрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд╣ рд╣реИ: рдмрдВрдж рдХреЛ рдПрдХ рдмрд╛рд░ рдЖрд▓рд╕реА рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реНрд╡рдпрдВ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдХрднреА рднреА рдмрд░рдХрд░рд╛рд░ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдирдореВрдирд╛ рдХреЛрдб рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
class Person {
init(name: String) {
self.name = name
print("\(name) is born.")
}
deinit {
print("\(name) dies.")
}
var name: String
lazy var greeting: String = {
return "Hello \(self.name)!"
}()
}
do {
let t = Person(name: "Ray")
print(t.greeting)
}
print ("Next")
// Prints:
// Ray is born.
// Hello Ray!
// Ray dies.
// Next
do {
let t = Person(name: "Ray")
}
print ("End of the world")
// Prints:
// Ray is born.
// Ray dies.
// End of the world
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдЗрд╕ рдкреВрд░реА рдЖрд▓рд╕реА рдЪреАрдЬрд╝ рдХреЛ рджреЗрдЦреЗрдВред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреБрдЧрддрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ CLLocationManager
рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХреНрд╕реЗрд╕ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдордзреНрдп-рд╕реЗрдЧ рдореЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдорд╛рдВрдЧрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рдкреИрдЯрд░реНрди рдЬреЛ рдереЛрдбрд╝рд╛ рдХрдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд╡рд╛рдИ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдПрдХ рдирд┐рдЬреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ:
lazy var locationManager: CLLocationManager = self.makeLocationManager()
private func makeLocationManager() -> CLLocationManager
let manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.delegate = self
manager.requestAlwaysAuthorization()
return manager
}
рдиреЛрдЯреНрд╕ рдХреА рдПрдХ рдЬреЛрдбрд╝реА:
self
рдХреЗ рдЕрдирд╕реБрд▓рдЭреЗ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЧреБрдкреНрдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИредрдпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдореЗрдВ рдпрд╛ рдмрд┐рдирд╛ рд╢рд░реНрдд viewDidLoad()
рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрд▓рд╕реА рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреИрдЯрд░реНрди рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ "рдЖрд▓рд╕реА рд╕рднреА рдЪреАрдЬреЗрдВ" рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LazyBoxes рдЬреИрд╕реЗ рдХреБрдЫ рдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдореБрдЭреЗ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджреНрдпрдкрд┐ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЖрд▓рд╕реА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рд╢рд╛рдпрдж рдПрдХ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдЖ рд░рд╣рд╛ рд╣реИ:
https://github.com/apple/swift-evolution/blob/master/proposals/0030-property-behavior-decls.md
рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ:
рдЖрд▓рд╕реА
рд╡рд╕реНрддреБ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдкрд░ рдорд╣реАрди рдЕрдирд╛рдЬ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
// Mark: - Location services
extension MyViewController {
lazy var locationManager: CLLocationManager = self.makeLocationManager()
private func makeLocationManager() -> CLLocationManager
let manager = CLLocationManager()
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.delegate = self
manager.requestAlwaysAuthorization()
return manager
}
// :
}
рдореБрдЭреЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рдмреНрд▓реЙрдХ рд╕реНрдЯрд╛рдЗрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рдРрддрд░рд╛рдЬ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдореЗрдВ рдбрд╛рд▓рдХрд░ рдПрдХ рдЖрд╕рд╛рди рдпреВрдирд┐рдЯ/рдпреВрдЖрдИ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдУрд╡рд░рд░рд╛рдЗрдб рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
рд╡реИрд╕реЗ рд╕реНрдерд╛рди рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд╡рд░реНрдЧ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдмрдВрдзрдХ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдкреНрд░рддрд┐рдирд┐рдзрд┐ = рд╕реНрд╡рдпрдВ
рдЖрдкрдХрд╛ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ?
рдмрд╕ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ (рдирд┐рдпрдВрддреНрд░рдХ рджреЗрдЦреЗрдВ?) рдХреЛ CLLocationManagerDelegate рдХреЗ рдЕрдиреБрд░реВрдк рдмрдирд╛рдПрдВред
@rayfix рдореИрдВрдиреЗ рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рд╕реБрдкрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЖрдзрд╛рд░ рдкрд░ CLLocationManagerDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ред
рдзрдиреНрдпрд╡рд╛рдж
рдПрдлрд╡рд╛рдИрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдЬреЛ рдЧреНрд░реЙрдл рдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ @noescape
рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
https://twitter.com/jckarter/status/704100315587477504
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдк рдЕрднреА рднреА рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рднреАрддрд░ рд╕реНрд╡рдпрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдЪрд░)
рдмрд╕ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХреНрд╕рдХреЛрдб 8 рдореЗрдВ рдирдП рдореЗрдореЛрд░реА рдЧреНрд░рд╛рдл рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдПрдХ рдХреИрдкреНрдЪрд░ рдерд╛ рдЬрдм рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдЕрдЬреНрдЮрд╛рдд рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛:
lazy var locationManager: CLLocationManager = {
[unowned self] in
var _locationManager = CLLocationManager()
_locationManager.delegate = self
_locationManager.desiredAccuracy = Set.shared.trackingAccuracy
_locationManager.allowsBackgroundLocationUpdates = true
_locationManager.activityType = .fitness
_locationManager.distanceFilter = Double(Set.shared.waypointInterval)
return _locationManager
}()
рд▓реЗрдХрд┐рди рдРрд╕рд╛ рддрдм рдирд╣реАрдВ рд╣реБрдЖ рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдФрд░ рдХреЛрдИ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ред
@rondiel рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ CLLocationManager рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдЕрд╕рд╛рдЗрди (iOS 10 SDK) рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
@property(assign, nonatomic, nullable) id<CLLocationManagerDelegate> delegate;
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдПрдлрд╡рд╛рдИрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдЬреЛ рдЧреНрд░реЙрдл рдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рд╣реИ рдХрд┐ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ
@noescape
рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗредhttps://twitter.com/jckarter/status/704100315587477504
рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдк рдЕрднреА рднреА рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд▓рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рднреАрддрд░ рд╕реНрд╡рдпрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдЪрд░)