胃胀疼是什么原因| 疏朗是什么意思| aivei是什么品牌| 早上6点是什么时辰| 老是肚子疼是什么原因| 冲代表什么生肖| 庖丁是什么意思| 什么无比| 儿童经常头晕什么原因导致的| 什么动物菩萨心肠| 5.29是什么星座| 一个马一个并念什么| 中山市有什么大学| 大枕大池是什么意思| 咽口水喉咙痛吃什么药| 煲汤放什么药材补气血| 吃什么长头发快| 胆固醇高吃什么| 避火图是什么| 敌人是什么意思| 舌尖有裂纹是什么原因| 红斑狼疮吃什么药最好| 竖中指代表什么意思| 什么水果补充维生素c| 渠道货是什么意思| 氮肥是什么肥| 脂肪最终被消化成什么| 相与是什么意思| 苦瓜为什么是苦的| 不老实是什么意思| 地图鱼吃什么| 韩信属什么生肖| 盖世英雄是什么意思| 睡觉流口水是什么原因引起的| 生不逢时是什么意思| 复配是什么意思| 日加西念什么| 含羞草为什么害羞| 单绒双羊是什么意思| 阴道是什么味道| 血管瘤是什么东西| 再生纤维素纤维是什么| 三叶香是什么菜| 乙肝e抗原阳性是什么意思| 学海无涯苦作舟的上一句是什么| 取环是什么意思| 红豆吃多了有什么坏处| 手经常发麻是什么原因| 美国绿卡有什么好处| 今天是个什么日子| 高血压为什么不能献血| 谷氨酰转移酶高是什么病| 女人绝经后靠什么排毒| 张嘴睡觉有什么危害| 手机买什么好| 肺气肿吃什么药| 把你的心我的心串一串是什么歌| 检查头部挂什么科| 吃什么对卵巢好| 小肠火吃什么药| lodge是什么意思| 助产士一般什么学历| 脚板心发热是什么原因| 实至名归是什么意思| 什么的东西| 福布斯是什么意思| 感染艾滋病有什么症状| 朔日是什么意思| acne是什么意思| 指奸是什么意思| 因果报应是什么意思| 窦骁父母是干什么的| 农历6月20日是什么星座| 泡泡棉是什么面料| 平动是什么意思| joyroom是什么牌子| 外围是什么意思| 打呼噜挂什么科| 文员是什么| 眼底充血是什么原因| 圣代是什么| 嬉皮士是什么意思| 枕头底下放剪刀有什么说法| 晚上喝什么茶不影响睡眠| 胃肠感冒吃什么药| 断生是什么意思啊| 登革热是什么症状| 草字头加个弓念什么| 五险一金有什么用| 孙悟空最后成了什么佛| 清明节干什么| 焦虑症吃什么药| efw是胎儿的什么意思| 女人眉心有痣代表什么| 金匮肾气丸有什么功效| 厚黑学讲的是什么| 吃完晚饭就犯困是什么原因| 人中龙凤是什么意思| 水马是什么| 蛇标志的车是什么牌子| 心跳太慢吃什么药| 1966年属马的是什么命| sm什么意思| 龋齿是什么样子的图片| 头孢和什么不能一起吃| 40岁适合什么工作| 周传雄得了什么病| dbm是什么单位| 倒挂金钩是什么意思| 吃过期药有什么危害| 双肾尿盐结晶是什么意思| 智齿为什么叫智齿| 乳腺炎吃什么药好| 农历10月14日是什么星座| simon是什么意思| 口腔溃疡看什么科| 八月份是什么季节| 为什么上小厕会有刺痛感| 缺铁性贫血吃什么药最好| 做梦捡到钱是什么预兆| 腰椎膨出是什么意思| 腿有淤青是什么原因| 脱敏什么意思| 展望未来什么意思| 喝什么茶能降低血糖| 什么是乳腺结节| 灵芝孢子粉治什么病| 蒲公英的花是什么颜色| 乌鱼蛋是什么| 诺氟沙星胶囊治什么| 脚后跟疼痛是什么原因| 中学为体西学为用是什么意思| 牛肉粉是什么调料| 附件炎吃什么药| 什么的莲蓬| 吃什么东西对肝脏好| 做什么动作可以长高| 桑葚有什么功效和作用| 冬虫夏草长什么样| 无水酥油是什么| 执业药师什么时候考试| betty是什么意思| 小淋巴结是什么意思| 壶嘴为什么不能对着人| 胰腺炎恢复期吃什么好| 什么是车震| 事宜什么意思| AC是胎儿的什么意思| 1月29号什么星座| 单抗是什么药| 肛门潮湿用什么药| 什么是肿瘤| 脱靶是什么意思| 白玫瑰代表什么| 什么明月| 口蘑是什么| 鞭挞是什么意思| 水瓶座和什么座最配| 血色素低吃什么补得快| psh是什么意思| 什么血型的人最聪明| 槟榔是什么| 胆汁酸高吃什么降得快| 地西泮又叫什么| 飞水是什么意思| 塔利班是什么组织| 胸闷气短吃什么药疗效比较好| 力挺是什么意思| 叶子是什么意思| hb是什么意思| 年轻人为什么会低血压| 庚申五行属什么| 光阴荏苒是什么意思| 舌头两边锯齿状是什么原因| 夏至节气吃什么| 河南是什么气候| 七七事变是什么生肖| 38岁属什么的生肖| 尿蛋白弱阳性什么意思| 被老鼠咬了有什么预兆| 备孕前要注意什么| 蚊子喜欢什么味道| 低度cin病变是什么意思| 3月2日是什么星座| 肩膀疼挂什么科室最好| 肠道胀气吃什么药| 刮宫后能吃什么水果| 梦见洗衣服是什么意思| 驾驶证扣6分有什么影响| 头上出汗是什么原因| 真菌性外耳道炎用什么药| 鬼蝴蝶为什么不能抓| 割韭菜什么意思| 王字旁和什么有关| 中性粒细胞百分比低是什么原因| 出片是什么意思| 锁骨疼挂什么科| 印度阿三是什么意思| 低密度脂蛋白偏高吃什么药| 巨蟹女喜欢什么样的男生| 白龙马是什么生肖| 柿子不能和什么一起吃| 59年属什么生肖| 夏季吃什么| 发物有什么| 嗫嚅是什么意思| 胎毒是什么| 气血不足吃什么好食补| 心慌手抖是什么原因| 西多士是什么| 985学校是什么意思| 苯甲酸钠是什么| 直白是什么意思| 禾加术念什么| 吃什么东西可以补血| 周杰伦为什么喜欢昆凌| 子宫内膜厚是什么原因造成的| 茄子把有什么功效| 与狼共舞什么意思| 篮子房是什么意思| 风热火眼是什么意思| 胃窦是什么意思| 祭日和忌日是什么意思| 大学院长是什么级别| 牙龈长期出血是什么原因| 电焊打眼最有效最快的方法是什么| 扁平苔藓是什么原因引起的| 流水席是什么意思| 异常子宫出血是什么原因| 梦见孩子拉粑粑是什么意思| 女人脸黄是什么原因该怎么调理| 马超属什么生肖| 夏对什么| 骨髓增生活跃是什么意思| 外卖吃什么| 猪脚和猪蹄有什么区别| 庹在姓氏上读什么| 女性白带有血丝是什么原因| 火山飘雪是什么菜| 10月15号是什么星座的| 7月15什么星座| 百步穿杨是什么意思| 郁结是什么意思| 石斛有什么用| 做梦捡到钱是什么意思| 梦见买面条有什么预兆| 紧急避孕药有什么副作用| 木字旁的字有什么| 做梦梦到怀孕了是什么意思| 美食家是什么意思| 腰间盘突出用什么药好| 九牛一毛是什么生肖| 白痰是什么原因| 大拇指指甲凹陷是什么原因| 绿是什么| 腿部浮肿吃什么药| 井里面一个点念什么| 去医院看舌头挂什么科| 武松是什么生肖| 宗室是什么意思| 换气是什么意思| 白带清洁度lv是什么意思| 吃什么食物能养肝护肝| 青羊药片有什么功效| 百度Направо към съдържанието

男子900万购别墅系科研楼 专家:存无法办理住

от Уикипедия, свободната енциклопедия
Вижте пояснителната страница за други значения на SWIFT.

Swift
Swift logo with text.svg
Парадигмамногопарадигмен (обектно ориентиран, фунционален, императивен)
Реализиране през9 септември 2014 г.;
преди 10 години
 (2025-08-14)[1]
АвторКрис Латнър и Apple
Софтуерен разработчикApple Inc.
Последна стабилна версия5.5.1
26 октомври 2021 г.;
преди 3 години
 (2025-08-14)
Типизация на даннитеStatic, strong, inferred
Повлиян отObjective-C, Rust, Haskell, Ruby, Python, Scala, C#, CLU,[2] D[3]
ПовлияваRust[4]
Операционна системаOS X, iOS, Darwin, Linux, FreeBSD
Софтуерен лицензчастен[5]
Файлово разширение.swift
Уебсайтswift.org
Swift в Общомедия
百度 今天他们再度领先18分,遗憾的是,他们还是没有把握住胜局。

Суифт (на английски: Swift) е многопарадигмен компилируем програмен език, създаден от Apple за разработване на приложения за iOS и Mac. Представен за първи път на Световната конференция за софтуерни разработчици (WWDC, Worldwide Developers Conference) през април 2014, Swift е разработен за Cocoa и Cocoa Touch. Проектиран е по такъв начин, че да помага на разработчиците при създаването на по-безопасен и надежден код, като отстранява и избягва цели категории разпространени програмни грешки. Swift може да се интегрира във вече създадени приложения благодарение на възможността за съвместното му използване с код, написан на Objective-C.

Разработването на Swift започва през 2010 от Крис Латнър, като в проекта са се включили още много други разработчици. Swift е заимствал доста идеи от други програмни езици като Objective-C, Rust, Haskell, Ruby, Python, C#, CLU и др. Първото приложение, написано на програмния език Swift, е представено официално на 2 юни 2014.

На 9 септември 2014 е представена финалната версия на Swift 1.0 и Xcode 6.0 за iOS. Swift 1.1 е пуснат на пазара на 22 октомври 2014 заедно с Xcode 6.1.

Swift е заместител на езика Objective-C. Разработен е на базата на съвременните теоретични концепции на програмирането, които водят до много по-опростен синтаксис на езика. По време на представянето му е описан като ?Objective-C без C“.

По подразбиране Swift не създава указатели (pointers) и други небезопасни обекти, за разлика от Objective-C, който широко използва указатели (pointers) за референция към инстанции на обекти. Освен това, синтаксисът за извикване на методи на Objective-C е заменен с точкова нотация и именно пространство, по-познати на програмистите от други обектно ориентирани езици като JavaScript, Java или C#. Swift въвежда използването на true named parameters, но запазва някои основни концепции от Objective-C като протоколи, затваряне (closures) и категории, като много често замества стария синтаксис с нова по-изчистена версия, позволявайки на тези концепции да бъдат използвани и върху други структури на езика като енумерациите.

Типове данни, променливи и опционални типове

[редактиране | редактиране на кода]

В Cocoa и Cocoa Touch много основни класове бяха част от библиотеката Foundation Kit library. ?Obj-C“ използваше така наречената ?синтактична захар“, при която един обект се създава и след това се променя чрез извикването на друг метод. Например конкатенацията на два низа от класа NSStrings изискваше извикването на следния метод: NSString *str = @"hello,"; str = [str stringByAppendingString:@" world"]; В Swift много от основните типове данни са включени в стандартните библиотеки на езика и могат да бъдат променяни директно. Например символните низове са свързани с класа NSString (когато Foundation библиотеката е импортирана) и могат да бъдат долепени чрез оператора +. Горният пример изглежда по следния начин: var str = "hello," str += " world" Библиотеката Foundation Kit почти винаги включваше две версии на основните си класове: версия, при която те могат да бъдат променяни по време на изпълнение на програмата и такава, при която те могат да бъдат създадени и прочетени, но не могат да бъдат променяни. Swift остава верен на тази традиция по по-обобщаващ начин, приложим за всеки числов тип данни, а именно: стойността се декларира като констатнта и чрез използването на ключовата дума ?let“ се превръща в тип, който не може да бъде променян. Не е необходимо константата да бъде декларирана още в началото на програмата. Стойности, които могат да бъдат променяни се декларират чрез ключовата дума“ var“.

Друга особеност на Swift са опционалните типове (optional types), които позволяват референции или стойности да действат по начин подобен на основните шаблони в C, където един указател (pointer) сочи или към стойност или е ?null“. Това предполага, че неопционалните типове, не водят до ?null-pointer error“. Опционалните типове се създават с помощта на така наречения опционален механизъм (Optional mechanism)—за създаването на цяло число (Integer), което е ?nullable“ се използва декларация подобна на var optionalInteger: Optional<Int>. Подобно на C#, опционалната променлива може да бъде означена с поставянето на въпросителен знак след името на променливата: var optionalInteger: Int?. Променливи или константи, означени като опционални или имат стойност от съответния тип или са ?nil“. Swift поддържа три нива за контрол на достъпа до части от кода: публично (public), вътрешно (internal) и частно (private). За разлика от много други обектно ориентирани езици тези нива игнорират наследствената йерархия (inheritance hierarchies). Частен достъп означава, че даден обект е достъпен само във ?source“ файла, в който е дефиниран. При вътрешния достъп обектите могат да бъдат използвани само в рамките на модула, в който е дефиниран ?source“ файла, а публичния достъп предоставя достъп от всеки модул. Решението да се избегне традиционния ?защитен“ обхват среща доста критики.

Библиотеки, runtime и development

[редактиране | редактиране на кода]

Swift използва същата ?runtime“ система като вече съществуващата от Objective-C, но изисква iOS 7 / OS X 10.9 или по-висока версия. Кодът написан на Swift и Objective-C може да бъде използван в една-единствена програма. За разлика от кодът, написан на C обаче, код написан на C++ не може да бъде използван директно от Swift. Необходимо е да се създаде ?обвивка“ (wrapper) между Swift и C++. При Objective-C, Swift има значителен достъп до обектния модел и може да бъде използван като подклас (subclass), да разширява и използва код написан на Objective-C code за да осигури поддръжка на протокола.

За да подпомогне писането на такива програми и повторното използване на вече съществуващ код Xcode 6 предлага полуавтоматична система, която създава и поддържа ?bridging header“, който показва код написан на Objective-C в Swift. Всъщност това е допълнителен header файл, който просто дефинира или вмъква всички Objective-C символи нужни за кода, който ще се пише на Swift. В кода, който се пише на Swift могат да се използват типове, функции и променливи, които са декларирани в кода, написан на С. Обратното също е възможно чрез вмъкване на символите от Swift от автоматично поддържания header файл в Objective-C декларациите. Например, ако имаме смесен проект наречен ?MyApp“, файлът, съдържащ код, написан на Objective-C, може да използва класовете или функциите от Swift файла със следния код: #import ?MyApp-Swift.h“. Не всички символи са достъпни, използвайки този механизъм обаче – например generic types, необектните опционални типове (non-object optional types), някои енумерации и дори Unicode идентификатори могат да направят символите недостъпни за Objective-C.

Swift има ограничена поддръжка на атрибути, метаданни, четени от средата за разработка, които незадължително са част от компилирания код. Подобно на Objective-C, атрибутите използват синтаксисът. Пример за такъв атрибут е @IBOutlet, който обозначава дадена стойност в кода като ?outlet“, достъпен за използване в рамките на Interface Builder (IB). ?Outlet“ е средство, което обвързва стойността с обект от кода.

Управление на паметта (Memory management)

[редактиране | редактиране на кода]

Swift използва система за автоматично броене на референции (Automatic Reference Counting или ARC) за управление на паметта. Един от проблемите с ARC е вероятността да се създаде цикъл от референции (strong reference cycle), при който инстанции на два различни класа съдържат референции един към друг, което е причина да бъдат свързани в паметта и да не могат да бъдат ?освободени“ никога. Това може да бъде избегнато чрез използването на слаби и непритежаеми ключови думи (weak and unowned keywords). Обикновено за връзката родител-дете (parent-child) се използва силна референция докато за дете-родител (child-parent) се използва или слаба референция, където родителите и децата могат и да не бъдат свързани, или непритежаема където детето винаги има родител, но родителят може да няма деца. Слабите референции трябва да са опционни променливи, т.к могат да бъдат променяни и да станат ?nil“.

Затваряне(closure) вътре в един клас също може да създаде цикъл от референции (strong reference cycle) заради self-references. Програмистът трябва да посочи кои self-references са слаби или непритежаеми в т.нар. capture list.

Дебъгване и други елемент

[редактиране | редактиране на кода]

Дебъгването в Swift се извършва чрез read–eval–print-loop (REPL). Средата е доразвита с добавянето на нова концепция, наречена 'playgrounds'. 'Playgrounds' са интерактивни изгледи от Xcode средата, отразяващи в движение промените в кода. Timeline Assistant може да бъде използван за да покаже резултатите от изпълнението на програмата в анимирам вариант.

  • Основните числови типове данни (Int, UInt, Float, Double)
  • Повечето оператори са заимствани от С, но има и някои нови
  • Къдравите скоби (Curly braces) се използват за групиране на изрази.
  • Присвояването на стойност към променлива се извършва чрез знака за равенство, но за сравнение на две променливи се използват два последователни знака за равенство. Операторът ? ===“ проверява дали два елемента сочат към един и същи обект.
  • Условните конструкции и циклите (for, while, if, switch) са подобни, но имат и някои допълнителни функционалности, например цикълът for in обхожда всеки тип колекция, цикълът switch може да приема нецелочислени (non-integer) cases и др.
  • Изразите не трябва да завършват с точка и запетая (;), въпреки че те трябва да се използват в случаите на няколко израза на един ред
  • Не се изискват хедър файлове (header files)
  • Силно типизиран език
  • Generic programming

Функциите са първокласни обекти.

  • Случаите в енумерациите (enumeration cases) могат да приемат асоциативен тип данни (алгебрични типове данни).
  • Операторите могат да бъдат предифинирани в класове (operator overloading).
  • Символните низове (strings) поддържат напълно Unicode. Повечето Unicode символи могат да бъдат използвани или в идентификатори или в оператори.
  • Липсва ?exception handling“ (въпреки че може да бъде заместено с използването на затваряния (closures)).
  • Някои ?странни поведения“ при езиците от фамиличта на C са променени:
  • Указателите не се показват по подразбиране. Не е необходимо разработчикът да запазва или маркира имена за рефериране или дерефериране (de-referencing).
  • Присвояванията не връщат стойност. Често срещана грешка е да се напише if (i=0). В случаите когато if (i==0) се получава грешка при компилиране (compile-time error).
  • Няма нужда от израза break в switch блоковете, т.к програмата преминава към следващия случай само ако е използван израза fallthrough.
  • Променливите и константите трябва да се инициализират и границите на масивите винаги се проверяват.
  • Overflows, които имат неопределено поведение за целте числа със знак в C, са включени в ?run-time error“, но могат да бъдат разрешени чрез специалните аритметични оператори &+, &-, &*, &/ и &%. Атрибутите min и max са дефинирани за всички целочислени типове в Swift и могат да бъдат използвани за безопасна проверка за евентуални overflows.

Python е един от езиците вдъхновил написването на Swift.

  • И двата езика използват средата за разработка Read–eval–print loop (REPL)
  • Условните конструкции и циклите са подобни (for, if, while)
  • Swift е компилируем език докато стандартния Python е интерпретируем език.
  • В Swift има някои по-комплексни променливи като UInt32, StringLiteralConvertible и т.н.
  • Swift използва къдравите скоби за групиране на изрази.
  • Python не използва ключовите думи var и let.
// this is a single line comment using two slashes.

/* this is also a comment,
   but written over multiple lines */

/* multiline comments
   /* can be nested! */
   so that you can block out code containing multiline comments
*/

// Swift variables are declared with "var" followed by a name, a type, and a value
var explicitDouble: Double = 70

// if the type is omitted, Swift will infer it from the variable's initial value
var implicitInteger = 70
var implicitDouble = 70.0
var  = "美國"

// Swift constants are declared with "let" followed by a name, a type, and a value
let numberOfBananas: Int = 10

// if the type is omitted, Swift will infer it from the constant's value
let numberOfApples = 3
let numberOfOranges = 5

// values of variables and constants can be interpolated in strings as follows
let appleSummary = "I have \(numberOfApples) apples."
let fruitSummary = "I have \(numberOfApples + numberOfOranges) pieces of fruit."

// in playgrounds, code can be placed in the global scope
println("Hello, world")

// define an array
var fruits = ["mango", "kiwi", "avocado"]

// example of if statement; .isEmpty, .count
if fruits.isEmpty {
    println("No fruits in my array.")
} else {
    println("There are \(fruits.count) items in my array")
}

// define a dictionary with four items, each with a person's name and age
let people = ["Anna": 67, "Beto": 8, "Jack": 33, "Sam": 25]

// now we use Swift's flexible enumerator system to extract both values in a single loop
for (name, age) in people {
    println("\(name) is \(age) years old.")
}

// functions and methods are declared with the "func" syntax
// the return type is specified with ->
func sayHello(personName: String) -> String {
    let greeting = "Hello, " + personName + "!"
    return greeting
}

// prints "Hello, Jane!"
println(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
}

// we can also specify the name of the parameter
println(sayAge(personName: "Jane", personAge: 42))
  1. Swift Has Reached 1.0 // Apple, 9 септември 2014. Посетен на 8 март 2015.
  2. Lattner, Chris. Chris Lattner's Homepage // Chris Lattner, 3 юни 2014. Посетен на 3 юни 2014. I started work on the Swift Programming Language in July of 2010. I implemented much of the basic language structure, with only a few people knowing of its existence. A few other (amazing) people started contributing in earnest late in 2011, and it became a major focus for the Apple Developer Tools group in July 2013 [...] drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  3. Building assert() in Swift, Part 2: __FILE__ and __LINE__ – Swift Blog // Apple Developer. Посетен на 26 септември 2014. Swift borrows a clever feature from the D language: these identifiers expand to the location of the caller when evaluated in a default argument list.
  4. RFC for `if let` expression // Посетен на 4 декември 2014. The `if let` construct is based on the precedent set by Swift, which introduced its own `if let` statement.
  5. Lattner, Chris. Re: [LLVMdev] [cfe-dev] [ADVERTISEMENT] open positions in Apple's Swift compiler team // 11 юни 2014. Архивиран от оригинала на 2025-08-14. Посетен на 12 юни 2014. You can imagine that many of us want it to be open source and part of llvm, but the discussion hasn't happened yet, and won't for some time.
动脉导管未闭是什么意思 门户网站是什么 长沙有什么好玩的 护资成绩什么时候出 女上位什么意思
欣什么若什么 自慰是什么 水瓶座的幸运色是什么颜色 手长水泡是什么原因 弥漫性脂肪肝什么意思
刚愎自用是什么意思 左后背疼什么原因 遗精什么意思 4朵玫瑰代表什么意思 脚肿是什么原因造成的
aug什么意思 chase是什么意思 双胞胎代表什么生肖 耳道炎是什么原因引起的 osd是什么意思
咖啡不能和什么一起吃hcv9jop5ns8r.cn 001是什么意思hcv8jop2ns5r.cn 为什么会有痛经jasonfriends.com 撒尿分叉是什么原因hcv9jop7ns2r.cn 美国报警电话为什么是911gysmod.com
冠状动脉钙化是什么意思hcv9jop3ns6r.cn 猪脚煲汤放什么材料好qingzhougame.com dream car是什么意思hcv8jop4ns8r.cn 做梦飞起来了是什么兆头hcv8jop3ns3r.cn 什么西瓜hcv9jop4ns8r.cn
混合性皮肤用什么护肤品比较好hcv7jop6ns9r.cn 私生子是什么意思hcv8jop7ns8r.cn PT医学上是什么意思hcv8jop0ns0r.cn 螃蟹吃什么东西hcv8jop5ns1r.cn 为什么会流口水hcv9jop6ns6r.cn
摩纳哥为什么这么富hcv8jop1ns2r.cn 身上到处痒是什么原因hcv9jop3ns8r.cn 仓鼠爱吃什么hcv8jop0ns5r.cn 下肢静脉曲张是什么原因引起的hcv8jop6ns7r.cn 回民是什么意思hcv8jop9ns0r.cn
百度