Swift 基本語(yǔ)法

一. Swift簡(jiǎn)介

Swift從2010年開(kāi)始開(kāi)發(fā),直到2014年的蘋(píng)果WWDC上進(jìn)行發(fā)布,Swift1.0.在2015年的蘋(píng)果WWDC上講Swift2.0開(kāi)源,至今已經(jīng)到達(dá)Swift3.0,由于Swift的開(kāi)源,Google將考慮使用Swift語(yǔ)言進(jìn)行Android端程序的開(kāi)發(fā).
語(yǔ)言排行可以根據(jù):http://www.tiobe.com 進(jìn)行參考.

二. 聲明變量和常量

Swift中聲明變量的時(shí)候,不需要制定變量的類(lèi)型,系統(tǒng)會(huì)根據(jù)開(kāi)發(fā)人員輸入的類(lèi)型,匹配到變量的基本類(lèi)型.
變量使用var關(guān)鍵字進(jìn)行修飾例如

var int_var = 1;

常量使用let關(guān)鍵字進(jìn)行修飾例如:

let a = "Carson";

在Swift中";"可加可不加.
在Swift中,字符串的函數(shù):

var string_var = "This is";
// 字符串拼接
string_var += "Carson";
// 字符串中的字符刪除
string_var.removeAtIndex(string_var.startIndex.advancedBy(2));
// 指定位置添加字符
string_var.insert("C", atIndex: string_var.startIndex.advancedBy(2));
// 指定位置添加字符串
string_var.insertContentsOf("ABCD".characters, at: string_var.startIndex.advancedBy(7));

注意:Swift中不存在隱式轉(zhuǎn)換,即:低精度變量不可以直接賦值給高精度.需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換.
注Swift重的強(qiáng)制類(lèi)型轉(zhuǎn)換:

var int_var = 23;
var double_var = Double(int_var);
// 判斷字符串是否為空
string_var.isEmpty;// 為bool類(lèi)型,true與false兩個(gè)值
var int_value = 12;
print("\(int_value)"); // Swift中的原樣輸出

三. 數(shù)組和字典

Swift中使用變量聲明的數(shù)組均為可變數(shù)組,不存在不可變數(shù)組,并且在數(shù)組初始化的時(shí)候,可以指定數(shù)組中元素的類(lèi)型.或者,不指定數(shù)組中的元素類(lèi)型,可以隨意的將各種類(lèi)型的元素存放在數(shù)組中.
Swift中的數(shù)組使用源碼:

// 不定元素類(lèi)型的數(shù)組
var array_var_1 = ["haha",23,"haha",true,23.0];
// 指定元素類(lèi)型的數(shù)組:字符串?dāng)?shù)組
var array_var_2:Array = Array<String>();
// 整型數(shù)組
var array_var_3 = [1,2,3,2,1,12,23,12,3];
// 數(shù)組排序
var array_var_4 = array_var_3.sort();
// 數(shù)組最大值
array_var_3.maxElement();
// 數(shù)組最小值
array_var_3.minElement();

Swift中的字典與PHP中的字典類(lèi)似,為鍵值對(duì),直接賦值給數(shù)組的對(duì)象就可以完成.
Swift中的字典使用源碼:

// 不指定字典的鍵-值類(lèi)型
var dictionary_var_1 = ["name":"Carson","age":23,"gender":"Male"];
// 指定字典中的鍵-值類(lèi)型
var dictionary_var_2:Dictionary<String,String> = ["name":"Carson"];
// 增加鍵值對(duì)
dictionary_var_2["gender"] = "Male";
// 通過(guò)鍵值刪除鍵值對(duì)
dictionary_var_2.removeValueForKey("gender");
// 通過(guò)鍵值的索引進(jìn)行刪除鍵值對(duì)
dictionary_var_2.removeAtIndex(dictionary_var_2.indexForKey("gender")!);

四. 元組

元組是Swift中獨(dú)有的一種數(shù)據(jù)格式,是一個(gè)可以返回多個(gè)值的數(shù)據(jù)格式.在聲明的時(shí)候使用"()"聲明,元組中的元素可以通過(guò)下標(biāo)去訪問(wèn),也可以通過(guò)鍵值去訪問(wèn).

// 注意在元組中的鍵值不需要加""號(hào)
// 不指定元素類(lèi)型類(lèi)型的元組
var status_1 = (name:"Carson",gender:23);
// 指定元素類(lèi)型的元組
var status_2:(name:String,gender:Int) = ("Leo",23);
// 從元組中取值(鍵取值)
print(status_1.name);
// (下標(biāo)取值)
print(status_1.0);

元組中還以存放數(shù)組字典等類(lèi)型.

五. 循環(huán)結(jié)構(gòu)

Swift中的循環(huán)結(jié)構(gòu)有三種分別為repeat-while,while,for三種結(jié)構(gòu),其中repeat-while結(jié)構(gòu)與其他語(yǔ)言中的do-while結(jié)構(gòu)一致(至少執(zhí)行一次).
循環(huán)輸出1~100示例源碼

// repeat-while循環(huán)
var i = 1;
repeat {
    print(i);
    i++;
} while(i < 101);
// while循環(huán)
var j = 1;
while (j < 101) {
    print(j);
    j++;
}
// 普通for循環(huán)
for (var i = 1; i < 101; i++) {
    print(i);
}
// for in循環(huán)...運(yùn)算符 與..<運(yùn)算符
// ... 為閉區(qū)間,為[1,100]
for s in 1 ... 100 {
    print(s);
}
// ..< 為左閉右開(kāi)區(qū)間,為[1,100)
for s in 1 ..< 100 {
    print(s);
}

擴(kuò)充內(nèi)容,使用for-in遍歷數(shù)組,字典獲取其中的元素.

// for-in 遍歷數(shù)組
var array = ["haha",23,"haha",true,23.0];
for s in array {
    print(s);
}
// for-in 遍歷字典
var dictionary = ["Name":"Carson","Gender":"Male"];
for (key,value) in dictionary {
    print(key,value);
}

六. 分支結(jié)構(gòu)

Swift中的分支結(jié)構(gòu),與其他語(yǔ)言相同,if與if-else結(jié)結(jié)構(gòu),還有switch-case結(jié)構(gòu).
if-else結(jié)構(gòu)示例源碼:

// 判斷字符串是否為空,為空的話(huà)輸出為空,不為空則數(shù)組字符串.
var string_var = "ABCDEFG";
if (string_var.isEmpty) {
    print("is null!");
} else {
    print(string_var);
}

switch-case結(jié)構(gòu)示例源碼:
注意:在Swift中,case():中的參數(shù)為以為字符串,或者表達(dá)式類(lèi)型.不僅僅局限于Int類(lèi)型.使用約束條件的時(shí)候使用關(guān)鍵字where類(lèi)似于SQL語(yǔ)句.并且,Swift中不需要添加break關(guān)鍵字,默認(rèn)添加上了關(guān)鍵字break,若想使用成為像刪除了break關(guān)鍵字的狀態(tài),讓代碼順序執(zhí)行,則需要使用語(yǔ)言所提供的fallthrough關(guān)鍵字.

// 聲明一個(gè)10個(gè)元素的整型數(shù)組,使用switch-case判斷奇數(shù)則輸出奇數(shù),為偶數(shù)則輸出偶數(shù)
var array_int_var:Array<Int> = Array();
var count = 10;
for (var i = 0; i < count; i++) {
    array_int_var.append(random() % 100 + 1);
}
for s in array_int_var {
    switch (s) {
    case 1 ... 30:
        print(s,"為[1,30]之間的數(shù)");
        fallthrough;
    case s where s % 2 == 0:
        print(s,"為偶數(shù)!");
    case s where s % 2 != 0:
        print(s,"為奇數(shù)!");
    default:
    print("未知");
    }
}

七. 枚舉

在C語(yǔ)言中,枚舉類(lèi)型將枚舉名與一個(gè)整型值相對(duì)應(yīng),而在Swift中,不必要給每一個(gè)枚舉類(lèi)型給一個(gè)確定的值,若給值,不簡(jiǎn)單局限于整型值,還可以為整型值,字符串,字符,浮點(diǎn)等.
示例源碼:

// enum (枚舉名稱(chēng)):(枚舉值類(lèi)型) { case (枚舉名稱(chēng)) = (枚舉值) }
enum Direction:String {
    case East = "東"
    case West = "西"
    case North = "北"
    case South = "南"
}
// 獲取得到枚舉值(直接通過(guò)點(diǎn)語(yǔ)法得到的是枚舉的名稱(chēng),使用.rawValue為枚舉值,.hashValue為枚舉值在枚舉中的index)
print(Direction.South.hashValue);

八. 函數(shù)

Swift中的函數(shù)也與C語(yǔ)言一樣,也分為四種函數(shù),無(wú)返回值無(wú)參數(shù),有返回值無(wú)參數(shù),無(wú)返回值有參數(shù),有返回值有參數(shù).函數(shù)必須先定義后使用.
示例源碼:

// 無(wú)返回值無(wú)參數(shù)
func method_1() -> Void {
    print("我是無(wú)返回值,無(wú)參數(shù)的函數(shù)!");
}
// 函數(shù)調(diào)用
method_1();
// 無(wú)返回值有參數(shù)
func method_2(s:String) -> Void {
    print(s);
}
// 函數(shù)調(diào)用
method_2("我是無(wú)返回值,有參數(shù)的函數(shù)!");
// 有返回值無(wú)參數(shù)
func method_3() -> (String) {
    return "我是有返回值,無(wú)參數(shù)的函數(shù)!";
}
// 函數(shù)調(diào)用
print(method_3());
// 有返回值有參數(shù)
func method_4(s:String) -> (String) {
    return s + "啦啦啦!";
}
// 函數(shù)調(diào)用
print(method_4("我是有返回值,有參數(shù)的函數(shù)!"));

在Swift中函數(shù)可以進(jìn)行嵌套聲明與其他語(yǔ)言不同,嵌套在內(nèi)部的函數(shù)則成為內(nèi)部函數(shù),其作用范圍,僅在外部函數(shù)中.
示例源碼:

func outMethod() -> Void {
    func inMethod() -> Void {
        print("我是內(nèi)部函數(shù)!");
    }
    print("我是外部函數(shù)!");
    // 內(nèi)部函數(shù)調(diào)用
    inMethod();
}
// 外部函數(shù)調(diào)用
outMethod();

使用函數(shù)修改實(shí)參的值的時(shí)候,借助關(guān)鍵字inout,即將實(shí)參的地址作為參數(shù)傳遞給函數(shù),進(jìn)行運(yùn)算.
示例源碼:

// 使用函數(shù)的方式,將a的值更改為20;
var a = 10;
func add(inout b:Int) -> Void {
    b += 10;
}
// 函數(shù)調(diào)用
add(&a);
print(a);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恤左,一起剝皮案震驚了整個(gè)濱河市悴侵,隨后出現(xiàn)的幾起案子瞳步,更是在濱河造成了極大的恐慌,老刑警劉巖朵锣,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涕俗,居然都是意外死亡高蜂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蔗喂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忘渔,“玉大人,你說(shuō)我怎么就攤上這事缰儿∑枇福” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵乖阵,是天一觀的道長(zhǎng)宣赔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瞪浸,這世上最難降的妖魔是什么儒将? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮对蒲,結(jié)果婚禮上钩蚊,老公的妹妹穿的比我還像新娘。我一直安慰自己蹈矮,他們只是感情好砰逻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著泛鸟,像睡著了一般蝠咆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上北滥,一...
    開(kāi)封第一講書(shū)人閱讀 49,850評(píng)論 1 290
  • 那天刚操,我揣著相機(jī)與錄音,去河邊找鬼碑韵。 笑死赡茸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的祝闻。 我是一名探鬼主播占卧,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼遗菠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了华蜒?” 一聲冷哼從身側(cè)響起辙纬,我...
    開(kāi)封第一講書(shū)人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叭喜,沒(méi)想到半個(gè)月后贺拣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捂蕴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年譬涡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啥辨。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涡匀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溉知,到底是詐尸還是另有隱情陨瘩,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布级乍,位于F島的核電站舌劳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏玫荣。R本人自食惡果不足惜甚淡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崇决。 院中可真熱鬧材诽,春花似錦底挫、人聲如沸恒傻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盈厘。三九已至,卻和暖如春官边,著一層夾襖步出監(jiān)牢的瞬間沸手,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工注簿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留契吉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓诡渴,卻偏偏與公主長(zhǎng)得像捐晶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • YES 2014WWDC發(fā)布 常量和變量使用注意 在實(shí)際過(guò)程中,建議先定義常量,如果需要修改再改變?yōu)樽兞?更加安全...
    南馮閱讀 541評(píng)論 0 0
  • 1.新建Xocode Swift 程序 2.(基本使用) 在Swift中沒(méi)有.h 和.m文件 只有一個(gè).Swift...
    圓小米123閱讀 1,635評(píng)論 0 7
  • 2010年7月,chirs Lattner 用一年的時(shí)間完成了swift的基本框架惑灵,于2014年6月分布山上, 取消了...
    張無(wú)忌_閱讀 521評(píng)論 0 3
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,784評(píng)論 1 10
  • 總會(huì)有一個(gè)人,讓你覺(jué)得英支,靠近他佩憾,就是燃燒自己。 所以 選擇一點(diǎn)一點(diǎn)地去靠近干花,不至于讓火焰將自己化為灰燼妄帘。
    君曉墨閱讀 162評(píng)論 0 0