2015-11-23 24 views
6

Ben Parse.com, bu özel sözdizimi ne anlama geliyor?

codementor.io tutorial bağlanmak için bazı iOS Swift öğreticiler izlemeye kalkıştığı oldum:

loginViewController.fields = [.UsernameAndPassword, .LogInButton, .SignUpButton, .PasswordForgotten, .Facebook] 

loginViewController.fields = .UsernameAndPassword | .LogInButton | .PasswordForgotten | .SignUpButton | .Facebook | .Twitter 

makeschool tutorial Ben eski Anahtarı 1.x olduğunu varsayalım, andlatter Swift 2'dir. Bağlamdan aynı şeyi yapıyor gibi görünüyorlar, ama henüz sözdizimindeki değişim için dil referanslarını bulamadım. Noktaları, boruları ve virgülleri aramak çok zor ... Birisi her snippet'teki sözdizimini açıklayabilir mi? (Dil özelliğiyle ilgili okumaya çalışıyorum, ancak çalışmak için bir uygulama almak gerçekten eğlenceli olurdu!)

cevap

7

eski Swift 1 sözdizimi seçenek C setleri ve Objective-C ile anlaşma yolu dayanmaktadır: İşte bir örnek: from the Swift docs var bir tamsayı tipinde ayarlanan bir seçeneği saklamak ve bitsel operatörleri kullanabilirsiniz (| ve & ve ~) bunları işlemek için. Yani .UsernameAndPassword | .LogInButton, .UsernameAndPassword ve .LogInButton seçeneklerinin her ikisinin de dahil edildiği bir seçenek anlamına gelir. Eski sözdiziminde, boş olmayan bir kümenin sözdizimine dayanmayan bir boş seçenek kümesini (hiçbir seçeneğin dahil olmadığı) göstermek için nil kullanın.

Chris Lattner, WWDC 2015 Session 106: What's New in Swift'da değişen sözdizimini açıkladı. İlk önce, eski sözdizimi ile ilgili sorunları açıklar:

Sorun şu ki, kullandığınız diğer sözdizimlerine gittiğinizde biraz daha az hoştur. Nil ile boş bir seçenek seti yaratırsınız - mantıklı değildir çünkü seçenek setleri ve isteğe bağlı seçenekler tamamen farklı kavramlardır ve birlikte birleştirilirler. Onları acı ve süper hataya eğilimli bir bitsel işlemle çıkarırsınız ve bunu yanlış anlayabilirsiniz.

Ama Swift 2 Bu çözer:

Sonra yeni bir yaklaşım anlatılmaktadır. Opsiyon setleri set-like yapar. Bu, seçenek kümeleri ve kümelerinin şimdi köşeli parantezlerle oluşturulduğu anlamına gelir. Bu, boş kümeler halinde boş köşeli parantezler aldığınız ve seçenek kümeleriyle çalışmak için tüm standart set API kümesini aldığınız anlamına gelir. OptionSetType (SetAlgebraType uyarak, dolaylı olarak) ArrayLiteralConvertible protokole uyum sağlaması nedeniyle yeni sözdizimi çalışır

nedenidir. Bu protokol, uyumlu bir nesnenin, bir dizi listesi alan bir init'a sahip olacak şekilde bir dizi hazırlaması kullanılarak başlatılmasına izin verir.

Yeni Swift 2 sözdiziminde, [ .UsernameAndPassword, .LogInButton ] hem .UsernameAndPassword hem de .LogInButton seçeneklerini içeren bir seçenek kümesini temsil eder. Düz bir eski Set: let intSet: Set<Int> = [ 17, 45 ]'u başlatabileceğiniz sözdizimine benzediğini unutmayın. Yeni sözdizimi, [] olarak ayarlanmış boş bir seçenek belirlediğinizi açıkça ortaya koymaktadır.

1

Swift artık ilk satırınızı kullandığınız dikey çubuk operatörünü desteklemiyor. İkincisi, bir numaralandırmanın farklı durumlarını ele almakta ve bunları bir seçenek seti olarak tanımlamaktadır.

enum CompassPoint { 
    case North 
    case South 
    case East 
    case West 
} 

directionToHead = .South 

switch directionToHead { 
case .North: 
    print("Lots of planets have a north") 
case .South: 
    print("Watch out for penguins") 
case .East: 
    print("Where the sun rises") 
case .West: 
    print("Where the skies are blue") 
} 

// prints "Watch out for penguins" 
+0

"İkincisi, bir numaralandırmanın farklı durumlarını alıp bir diziye yerleştirmektir." Hayır, ikincisi ilk için bir yedek. – NobodyNada

+0

@NobodyNada evet, her ikisi de aynı şeyi yaparlar - enum vakalarının bir koleksiyonunu tanımlarlar. – tylersimko

+2

Bir tür, ancak bir dizi değil, bir dizi belirlenir. – NobodyNada