Swift-控制符

文章是根据The Swift Programming Language 来总结的,今天就学习一下最基础的控制符,本文总结的是ifswitchfor-inforwhilerepeat-while

** 首先注意的是:条件语句括号()可以省略,跟其他编程语言有很大的差别,但是语句体的大括号{}是必须的,下面会有demo展示 **

if

** 基本语法 **

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

** 区别 **

在Swift中,条件必须是一个布尔表达式,也就是说不是true就是false
但是在OC中,什么表达式都可以,前提是条件语句成立,甚至是一个对象

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

但是在Swift不行,一下是错误写法,会报出:

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
}

这里可能涉及一点其他知识,就是条件语句使用字符串,不敢保证是不为nil的,所以需要用let处理字符串确实,就是字符串为nil,用到可选类型,就是在声明变量类型后面加上一个问号

var name : String? = "条件"

这句就是表示,name可以有值,也可以为nil,是可选类型
搭配if来用

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

如果name是nil,为false,那么就不会条件代码块,当name不为nil的时候,赋值给newName,条件成立,为true,执行大括号的代码块。当然也可以这样写

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

switch

switch没什么值得讲的,用发跟OC一样,但是条件类型就不是一样了,Java6以上是支持字符串的,Swift也是一样,格式是:
格式: switch(需要匹配的值) case 匹配的值: 需要执行的语句 break;而且条件** 支持任意类型的数据以及各种比较操作 **

OC与Swift的区别:

  • 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不能判断对象,必须是整数
OC:
NSNumber *age = @10;
switch (age) {
    case @1:
    {
      break;
    }
    case @2:
    { 
        break;
    }
}
  • Swift可以判断对象
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:     // 相当于 if
     print("ahah")
case 2:     // 相当于 else if
     print("ahah")
case 3:     // 相当于 else if
     print("ahah")
default:
     print("haha")
        } 
// 不可以这样写,因为不能穿透
Swift:
let age = 10
switch age {
case 1:
case 2: 
case 3: 
     print("ahah")
default:
     print("haha")
        } 
// 如果一定要跳过某个条件的话,可以这样写,但是OC绝对不可以
Swift:
let age = 10
switch age {
case 1 , 2:
case 3: 
     print("ahah")
default:
     print("haha")
        } 
  • OC在case中定义变量或者其他语句,一定要花括号{},不然作用域混乱
OC:
NSInteger age = 10;
switch (age) {
    case 1:
    {
        NSInteger height = 170;
        break;
    }
    case 2:
    case 3:
    { 
         break;
    }  
}
  • Swift在case中定义变量或者其他语句,不需要花括号
Swift:
let age = 10
switch age {
case 1:     // 相当于 if
     var name = "daisuke"
     var height = 170
     print("ahah")
case 2:     // 相当于 else if
     print("ahah")
case 3:     // 相当于 else if
     print("ahah")
default:
     print("haha")
        } 

for

  • 在OC中的两种for循环方式

  • 格式: for (初始化表达式;循环保持条件;循环后表达式) {需要执行的语句}

for (int index = 0; index < 10; index++) {
    // TODO
}
// 其中括号里面的条件`样式`想怎么搞就怎么搞
  • 在Swift的for循环方式

  • 1、for后面的圆括号可以省略

  • 2、只能是bool类型作为条件语句

  • 3、如果只有一条执行代码,for后面的花括号不可以省略

  • 4、for后面的三个参数都可以省略

  • 根据下标实现循环

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

for in

格式: for (接收参数 in 取出的参数) {需要执行的语句}
for in含义: 从(in)取出什么给什么, 直到取完为止
for in 一般用于遍历区间或者集合

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这个十个数,会将区间的值依次赋值给index
    sum += index
}
var dict = ["name":"daisuke", "age":10]
for (key, value) in dict
{
    print("\(key) = \(value)")
}

while

  • OC格式:while(循环保持条件){需要执行的语句}
int index = 0;
int sum = 0;
while(index < 10)
{
    index++;
    sum += index;
}
int index = 0;
int sum = 0;
while(index < 10)
    sum += index++;
// 只有一条执行语句的时候。花括号可以省略
  • Swift格式:while后的圆括号可以省略,只能以bool作为条件语句,如果只有一条指令while后面的大括号不可以省略
var index = 0
var sum = 0
while index < 10
{
    index++
    sum += index
}
var index = 0
var sum = 0
while index < 10
{
    sum += index++
}
// 只有一条执行语句的时候。花括号不可以省略

repeat while

  • OC中do while循环,格式:do while(循环保持条件) {需要执行的语句}
int index = 0;
int sum = 0;
do {
    sum += index;
    index++;
}
while(index < 10);
  • 在Swift2.0之后改为 repeat while, do用于捕捉异常。格式:while后面的圆括号可以省略,只能bool作为条件语句,只有一条语句的时候,do后面的花括号不能省略
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

想了解更多,欢迎来我的网站daisuke

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容