Swift-控制符

文章是根據(jù)The Swift Programming Language 來總結(jié)的朋凉,今天就學(xué)習(xí)一下最基礎(chǔ)的控制符蒲赂,本文總結(jié)的是if阱冶、switchfor-in滥嘴、for木蹬、whilerepeat-while

** 首先注意的是:條件語句括號(hào)()可以省略若皱,跟其他編程語言有很大的差別镊叁,但是語句體的大括號(hào){}是必須的,下面會(huì)有demo展示 **

if

** 基本語法 **

OC: 
Bool flag = YES;
if (flag) {
        // TODO
    }
Swift:
let flag = true      
if flag {
   // TODO
}  
if (flag) {
   // TODO
}

** 區(qū)別 **

在Swift中走触,條件必須是一個(gè)布爾表達(dá)式晦譬,也就是說不是true就是false
但是在OC中,什么表達(dá)式都可以互广,前提是條件語句成立敛腌,甚至是一個(gè)對(duì)象

OC:
NSString *str = @"條件";
if (str) {
   // TODO
}
NSInteger age = 10;
if (age) {
    // TODO
}

但是在Swift不行,一下是錯(cuò)誤寫法,會(huì)報(bào)出:

Type 'String' does not coonform to protocol 'BooleanType'

Type 'Int' does not coonform to protocol 'BooleanType'

Swift:
var name = "條件"
if name  {
   // TODO
}   
let age = 10
if age {
    // TODO
}

** 正確的寫法是: **

Swift:
var name : String? = "條件"
if let newName = name  {
    // TODO
    print(newName); // 打印條件
}
let age = 10
if age > 5 {
    // TODO
}

這里可能涉及一點(diǎn)其他知識(shí)惫皱,就是條件語句使用字符串像樊,不敢保證是不為nil的,所以需要用let處理字符串確實(shí)旅敷,就是字符串為nil凶硅,用到可選類型,就是在聲明變量類型后面加上一個(gè)問號(hào)

var name : String? = "條件"

這句就是表示,name可以有值扫皱,也可以為nil足绅,是可選類型
搭配if來用

if let newName = name  {
    // TODO
    print(newName); // 打印條件
}

如果name是nil,為false韩脑,那么就不會(huì)條件代碼塊氢妈,當(dāng)name不為nil的時(shí)候,賦值給newName段多,條件成立首量,為true,執(zhí)行大括號(hào)的代碼塊。當(dāng)然也可以這樣寫

if let newName: String? = "字符串"  {
    // TODO
    print(newName); // 打印條件
}

switch

switch沒什么值得講的加缘,用發(fā)跟OC一樣鸭叙,但是條件類型就不是一樣了,Java6以上是支持字符串的拣宏,Swift也是一樣沈贝,格式是:
格式: switch(需要匹配的值) case 匹配的值: 需要執(zhí)行的語句 break;而且條件** 支持任意類型的數(shù)據(jù)以及各種比較操作 **

OC與Swift的區(qū)別:

  • OC可以不寫default,default位置可以隨便寫
OC:
NSInteger age = 10;
switch (age) {
   case 1:
    {
      break;
    }
    case 2:
    { 
        break;
    }
}
  • Swift一定要寫default勋乾,default位置只能在最后
Swift:
let age = 10
switch age {
case 1:
     print("ahah")
default:
     print("haha")
        } 
  • OC不能判斷對(duì)象宋下,必須是整數(shù)
OC:
NSNumber *age = @10;
switch (age) {
    case @1:
    {
      break;
    }
    case @2:
    { 
        break;
    }
}
  • Swift可以判斷對(duì)象
Swift:
var name = "daisuke"
switch name {
case "daisuke":
     print("ahah")
case "alex":
     print("ahah")
default:
     print("haha")
        } 
  • OC可以穿透
OC:
NSInteger age = 10;
switch (age) {
    case 1:
    case 2:
    case 3:
    { 
        break;
    }
}
  • Swift不可以穿透,可以不寫break
Swift:
let age = 10
switch age {
case 1:     // 相當(dāng)于 if
     print("ahah")
case 2:     // 相當(dāng)于 else if
     print("ahah")
case 3:     // 相當(dāng)于 else if
     print("ahah")
default:
     print("haha")
        } 
// 不可以這樣寫辑莫,因?yàn)椴荒艽┩?Swift:
let age = 10
switch age {
case 1:
case 2: 
case 3: 
     print("ahah")
default:
     print("haha")
        } 
// 如果一定要跳過某個(gè)條件的話学歧,可以這樣寫,但是OC絕對(duì)不可以
Swift:
let age = 10
switch age {
case 1 , 2:
case 3: 
     print("ahah")
default:
     print("haha")
        } 
  • OC在case中定義變量或者其他語句各吨,一定要花括號(hào){}枝笨,不然作用域混亂
OC:
NSInteger age = 10;
switch (age) {
    case 1:
    {
        NSInteger height = 170;
        break;
    }
    case 2:
    case 3:
    { 
         break;
    }  
}
  • Swift在case中定義變量或者其他語句,不需要花括號(hào)
Swift:
let age = 10
switch age {
case 1:     // 相當(dāng)于 if
     var name = "daisuke"
     var height = 170
     print("ahah")
case 2:     // 相當(dāng)于 else if
     print("ahah")
case 3:     // 相當(dāng)于 else if
     print("ahah")
default:
     print("haha")
        } 

for

  • 在OC中的兩種for循環(huán)方式

  • 格式: for (初始化表達(dá)式;循環(huán)保持條件;循環(huán)后表達(dá)式) {需要執(zhí)行的語句}

for (int index = 0; index < 10; index++) {
    // TODO
}
// 其中括號(hào)里面的條件`樣式`想怎么搞就怎么搞
  • 在Swift的for循環(huán)方式

  • 1、for后面的圓括號(hào)可以省略

  • 2揭蜒、只能是bool類型作為條件語句

  • 3伺帘、如果只有一條執(zhí)行代碼,for后面的花括號(hào)不可以省略

  • 4忌锯、for后面的三個(gè)參數(shù)都可以省略

  • 根據(jù)下標(biāo)實(shí)現(xiàn)循環(huán)

var sum:Int = 0;
for var index = 0; index<10; index++
{
    sum += index
}

for in

格式: for (接收參數(shù) in 取出的參數(shù)) {需要執(zhí)行的語句}
for in含義: 從(in)取出什么給什么, 直到取完為止
for in 一般用于遍歷區(qū)間或者集合

NSArray *arrary = @[@{@"key":@"value"}, @{@"key1":@"value1"}];
for (NSDictionary *dict in arrary) {
    NSLog(@"%@", dict[@"key"]);
}
var sum:Int = 0;
for var index in 1...10
{
    // 1...10,表示1到10這個(gè)十個(gè)數(shù),會(huì)將區(qū)間的值依次賦值給index
    sum += index
}
var dict = ["name":"daisuke", "age":10]
for (key, value) in dict
{
    print("\(key) = \(value)")
}

while

  • OC格式:while(循環(huán)保持條件){需要執(zhí)行的語句}
int index = 0;
int sum = 0;
while(index < 10)
{
    index++;
    sum += index;
}
int index = 0;
int sum = 0;
while(index < 10)
    sum += index++;
// 只有一條執(zhí)行語句的時(shí)候伪嫁。花括號(hào)可以省略
  • Swift格式:while后的圓括號(hào)可以省略,只能以bool作為條件語句,如果只有一條指令while后面的大括號(hào)不可以省略
var index = 0
var sum = 0
while index < 10
{
    index++
    sum += index
}
var index = 0
var sum = 0
while index < 10
{
    sum += index++
}
// 只有一條執(zhí)行語句的時(shí)候偶垮≌趴龋花括號(hào)不可以省略

repeat while

  • OC中do while循環(huán),格式:do while(循環(huán)保持條件) {需要執(zhí)行的語句}
int index = 0;
int sum = 0;
do {
    sum += index;
    index++;
}
while(index < 10);
  • 在Swift2.0之后改為 repeat while, do用于捕捉異常似舵。格式:while后面的圓括號(hào)可以省略脚猾,只能bool作為條件語句,只有一條語句的時(shí)候砚哗,do后面的花括號(hào)不能省略
var index = 0
var sum = 0
repeat{
    sum += index
    index++
}
while index < 10
var index = 0
var sum = 0
repeat{
    sum += index++
}
while index < 10

想了解更多龙助,歡迎來我的網(wǎng)站daisuke

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛛芥,隨后出現(xiàn)的幾起案子提鸟,更是在濱河造成了極大的恐慌,老刑警劉巖仅淑,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件称勋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡涯竟,警方通過查閱死者的電腦和手機(jī)赡鲜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門空厌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人银酬,你說我怎么就攤上這事嘲更。” “怎么了揩瞪?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵赋朦,是天一觀的道長。 經(jīng)常有香客問我壮韭,道長北发,這世上最難降的妖魔是什么纹因? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任喷屋,我火速辦了婚禮,結(jié)果婚禮上瞭恰,老公的妹妹穿的比我還像新娘屯曹。我一直安慰自己,他們只是感情好惊畏,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布恶耽。 她就那樣靜靜地躺著,像睡著了一般颜启。 火紅的嫁衣襯著肌膚如雪偷俭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天缰盏,我揣著相機(jī)與錄音涌萤,去河邊找鬼。 笑死口猜,一個(gè)胖子當(dāng)著我的面吹牛负溪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播济炎,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼川抡,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了须尚?” 一聲冷哼從身側(cè)響起崖堤,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耐床,沒想到半個(gè)月后倘感,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咙咽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年老玛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜡豹,死狀恐怖麸粮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镜廉,我是刑警寧澤弄诲,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站娇唯,受9級(jí)特大地震影響齐遵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塔插,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一梗摇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧想许,春花似錦伶授、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至漱凝,卻和暖如春疮蹦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茸炒。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工愕乎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扣典。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓妆毕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贮尖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笛粘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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