2016-09-21 51 views
6
let loginRegisterButton:UIButton = { 
    let button = UIButton(type: .system) 
    button.backgroundColor = .white 
    button.setTitle("Register", for: .normal) 
    button.translatesAutoresizingMaskIntoConstraints = false 
    button.setTitleColor(.white, for: .normal) 
    return button 
}() 

bu değişken veya işlevdir, neden değeri döndürür? Neden buna diyoruz? parenthesis olmadan çalışmıyor, neden?Kıvrık parantez ve parantez içeren bir blok nasıl çalışır?

cevap

7

Bu, aynı noktada oluşturulmuş ve kullanılmış bir kapanışıdır. Her şeyi tek bir ifadeye koyamayacağınız zaman onu başlatma için kullanırsınız. Bu özellik, salt okunur oluştururken() var alanlarının yerine kullanılır.

Yukarıdaki durumda kod, bir düğme oluşturur ve ardından sonucu döndürmeden önce üzerinde ek yapılandırma gerçekleştirir. Bu, kodu init'dan başlatma sırasının yakınındaki kod bloklarına taşımak için iyi bir yoldur. Neler görselleştirmek için

bir yolu aynı şeyi yapar adlandırılmış fonksiyonun düşünmektir:

func makeWhiteButton() -> UIButton { 
    let button = UIButton(type: .system) 
    button.backgroundColor = UIColor.White 
    button.setTitle("Register", for: .normal) 
    button.translatesAutoresizingMaskIntoConstraints = false 
    button.setTitleColor(.white, for: .normal) 
    return button 
} 

Artık bir başlatıcısı

let loginRegisterButton:UIButton = makeWhiteButton() 

kod kullanabilirsiniz edebilirsiniz post aynı şeyi anonim bir "kapatma" fonksiyonu ile yapar. Kapama bloğundan sonraki parantezler, yukarıdaki makeWhiteButton'dan sonra parantez ile aynı nedenden dolayı vardır.

+0

Teşekkür ederim, bu mantıklı geliyor – Ninja13

+0

@ Ninja13 Hoş Geldiniz! Daha fazla yardıma ihtiyacınız yoksa, lütfen cevabın yanındaki gri onay işaretini tıklayarak kabul etmeyi düşünün. Bu, başkalarının sorununun çözüldüğünü bilmesini sağlar ve Yığın Taşması konusunda size yeni bir rozet kazandırır. – dasblinkenlight

İlgili konular