Swift – Xcode 6 Beta 4

Máme tu další betu, developer preview Yosemite a také pár novinek & změn ve Swiftu. Kompletní Release Notes ke stažení zde. V tomto článku zmíním pouze novinky týkající se Swiftu.

Access control

První a dlouho očekáváná novinka je access control. Vyčerpávající popis je v aktualizaci knihy The Swift Programming Language. Pokud si počkáte, co nevidět na toto téma vydám další článek o Swiftu.

Nová funkce stride()

Nahrazuje by() , tzn. po novu:

for i in stride( from: 0, to: 10, by: 2 ) {
  // 0, 2, 4, 6, 8
}

for i in stride( from: 0, through: 10, by: 2 ) {
  // 0, 2, 4, 6, 8, 10
}

Vylepšení a opravy známých chyb můžete očekávat v dalším releasu.

Deployment target

Od teď Swift vyžaduje deployment target iOS >= 7 and OS X >= Mavericks. Jinak to už nelze přeložit. Dříve to bylo možné.

Atributy, modifikátory

Atributy @final , @lazy , @optional  a @required  už nejsou atributy, ale modifikátory. To znamená, že se zapisují bez @ . Upravený předchozí příklad:

class HTMLElement {

  let name: String
  let text: String?

  lazy var asHTML: () -> String = {   //  <------ @lazy -> lazy
    [unowned self] in

      if let text = self.text {
        return "<(self.name)>(text)</(self.name)>"
      }

      return "<(self.name)/>"
  }

  init( name: String, text: String? ) {
    self.name = name
    self.text = text
  }

}

Unicode řetězce

Co dodat, hurá 🙂

var s = "café"

countElements( s ) // == 4
s.lengthOfBytesUsingEncoding( NSUTF8StringEncoding ) // == 5

s = "au{1F30D}cafeu{0301}umbrellau{FE0E}u{1F1E9}u{1F1EA}"

countElements( s ) // == 15
s.lengthOfBytesUsingEncoding( NSUTF8StringEncoding ) // == 30

A taky for-in  smyčka iteruje po jednotlivých znacích vnímaných člověkem. Nikoli byty a podobné underlying nesmysly.

Co bylo fixnuto v beta 4?

  • kompletní podpora Swiftu v REPL
  • NSUInteger  je Int  v systémových iOS a OS X frameworcích, jinak UInt
  • CGFloat  je separé typ, který je na 32-bitech Float  a na 64-bitech Double
  • CString  odstraněn, const char *  je importován jako ConstUnsafePointer< Int8 >
  • modulusWithOverflow přejmenován na remainderWithOverflow
  • vlastní typy mohou implementovat protokol BooleanLiteralConvertible (nejsem si jistý, jestli tohle už nebylo v Beta 3, nemám staré release notes, ale něco mi říká, že ano)

Plus nějaké další drobnosti, které se týkají Swiftu obecně, tj. něco v Xcode, něco v Playgrounds, … To si přečtěte v celých Release Notes – odkaz hned na začátku.

Makají, makají, už se to pomalu, ale jistě stabilizuje. Jenom jim nezávidím ten dlouhý seznam problémů, který ještě čeká na vyřešení a září se neúprosně blíží.