Swift (programovací jazyk)
Swift je multi-paradigmatický, kompilovaný, open source programovací jazyk od společnosti Apple, určený pro vývoj na platformách macOS, watchOS a iOS. Je zamýšlen jako alternativa k Objective-C a neměl by dovolit tolik chyb programátora jako Objective-C. Umí spolupracovat s existujícími frameworky Cocoa a Cocoa Touch. Swift je kompilován pomocí LLVM a ve stejném programu může být spolu s kódem v jazycích C, Objective-C a Objective-C++.[2] HistorieVývoj Swiftu započal Chris Lattner roku 2010 a následně se k němu připojili další vývojáři. Mnoho vlastností jazyka bylo převzato z Objective-C, Rust, Haskell, Ruby, Python, C#, CLU a mnoha dalších.[3] 2. června 2014 byl jazyk zveřejněn na WWDC konferenci,[4] spolu s dokumentací dostupnou na vývojářských stránkách Applu a v iBooks Store.[5] Historie verzí
VlastnostiSwift je z větší části obdobou Objective-C za využití moderních konceptů a syntaxe. Při jeho představení byl jednoduše představen jako „Objective-C bez C“[6][7] Swift na rozdíl od Objective-C nevyužívá pointery, v případě potřeby je však možné je využít.[8] Dále byl nahrazen smalltalkový způsob volání metod za tečkovou notaci a jmenné prostory, což je běžné v ostatních C-like jazycích, jako je například Java nebo C#. Swift přináší pojmenované parametry a zachovává klíčové vlastnosti Objective-C, často při zjednodušení syntaxe. Typy a proměnnéCocoa a Cocoa Touch obsahuje mnoho tříd, které byly součástí knihovny Foundation Kit. Patří mezi ně například NSString, pro práci s Unicode řetězci, nebo kolekce NSArray a NSDictionary. Objective-C pomocí syntaktického cukru umožňuje jednoduché vytvoření těchto objektů, ale po jejich vytvoření je nutné s nimi manipulovat pomocí volání objektových metod. Pro příklad následuje spojení dvou NSString objektů: NSString *str = @"hello,";
str = [str stringByAppendingString:@" world"];
Ve Swiftu je mnoho těchto základních typů přímo v jazyce a může s nimi být i přímo manipulováno. Například řetězce jsou neviditelně mapovány na NSString (když je Foundation importována) a spojení řetězců vypadá následovně:[9] var str = "hello,"
str += " world"
Foundation Kit obsahuje pro téměř každou třídu dvě její verze, mutable verzi, která může být modifikována za běhu programu, a immutable verzi, která může být po vytvoření pouze čtena.[10] Swift v tomto pokračuje a tuto vlastnost rozšiřuje na všechny typy, primitivní i komplexní. Při deklarování hodnoty se pomocí klíčového slova Další důležitou částí jazyka Swift je option typ, který může ale nemusí obsahovat hodnotu. Optionály jsou značeny znakem ? za typem:[11] var myOptionalString:String? = "Hello"
Tímto je možné dosáhnout podobného chování jako u pointerů v jazyce C, kde pointer může, ale i nemusí obsahovat hodnotu. Toto může být výhodné například v následujících případech:
Výhodou tohoto značení je také to, že programátor hned ví, u které proměnné je nutné provést kontrolu na null pointer.[12] Swift také podporuje omezení k objektům v následujících třech úrovních: public, internal a private. Na rozdíl od ostatních objektově orientovaných jazyků je ignorována dědičnost. Private naznačuje, že objekt je přístupný jen z jeho zdrojového souboru, „internal“ omezuje přístup na modul a „public“ umožňuje přístup z jakéhokoliv modulu.[13] V jiných jazycích přítomné „protected“ Swift nezná, což se setkalo s jistou kontroverzí.[14] Knihovny, runtime a vývojSwift využívá stejný runtime pro Objective-C na systémech Mac OS i iOS. To znamená, že programy ve Swiftu mohou být spuštěny na vícero existujících platformách. Důležitějším důsledkem je ale to, že jeden program může být zároveň naprogramován ve Swiftu, Objective-C ale i v C a C++. Pro zjednodušení vývoje aplikací a znovupoužití stávajícího kódu nabízí Xcode poloautomatický systém, který vytváří a spravuje „přemosťovací hlavičkové soubory“ pro zpřístupnění Objective-C kódu pro Swift. Díky tomuto dokáže Swift používat typy, funkce a proměnné, jako by byly napsané ve Swiftu. Obdobně dokáže Objective-C přistupovat k Swift kódu. Tímto ale nelze použít vlastnosti jazyka Swift, které Objective-C neumí, jako například generické typy nebo identifikátory v Unicode.[15] Správa pamětiSwift používá automatické počítání referencí (ARC) pro správu paměti. Jedním z problémů ARC je možné vytvoření strong reference cycle, kde dvě odlišné instance na sebe navzájem odkazují. Swift proto poskytuje klíčová slova Porovnání s Objective-CPodobné vlastnosti
Rozdílné vlastnosti
Ukázka kódu// Toto je komentář na jednom řádku
/* toto je komentář
napsaný na více řádcích */
/* Víceřádkové komentáře
/* mohou být vnořeny! */
takže je možné zakomentovat kód, který obsahuje komentáře
*/
// Proměnné ve Swiftu začínají na „var“, následovány jménem, typem a hodnotou
var explicitDouble: Double = 70
// Pokud je typ vynechán, bude použit typ výchozí hodnoty
var implicitInteger = 70
var implicitDouble = 70.0
var 国 = "日本"
// Konstanty jsou definovány pomocí „let“, následovány jménem, typem a hodnotou
let numberOfBananas: Int = 10
//Pokud je typ vynechán, bude použit typ výchozí hodnoty
let numberOfApples = 3
let numberOfOranges = 5
// Hodnoty proměnných mohou být použity v řetězcích následujícím způsobem
let appleSummary = "Mám \(numberOfApples) jablek."
let fruitSummary = "Mám\(numberOfApples + numberOfOranges) kusů ovoce."
// in playgrounds, code can be placed in the global scope
print("Hello, world")
// definice pole
var fruits = ["mango", "kiwi", "avocado"]
// ukázka if podmínky
if fruits.isEmpty {
print("No fruits in my array.")
} else {
print("There are \(fruits.count) items in my array")
}
//definice slovníky se jménem a věkem
let people = ["Anna": 67, "Beto": 8, "Jack": 33, "Sam": 25]
// ukázka získání více hodnot v jednom průběhu iterace
for (name, age) in people {
print("\(name) is \(age) years old.")
}
// funkce a metody jsou definovány pomocí „func“
// návratový typ je definován pomocí ->
func sayHello(personName: String) -> String {
let greeting = "Ahoj, " + personName + "!"
return greeting
}
// vytiskne „Ahoj, Jane!“
print(sayHello("Jane"))
// parameter names can be made external and required for calling
// the external name can be the same as the parameter name by
// prefixing with an octothorpe (#)
// or can be defined separately.
func sayAge(#personName: String, personAge Age: Int) -> String {
let result = "\(personName) is \(Age) years old."
return result
}
//Je také možné specifikovat jméno parametru
print(sayAge(personName: "Jane", personAge: 42))
Související článkyExterní odkazy
Reference
|
Portal di Ensiklopedia Dunia