Swift语法学习(区间、变量、元组、分支)

1、常量与变量

  • let:声明一个常量,一旦设定就不能改变。
  • var: 声明一个变量,变量的值可以随便更改的。
    使用原则:为保证数据的安全性尽量先用 let,只有需要改变的时候才使用 var

常量

/*
常量定义格式
* 声明符号 常量名称: 类型标注
* let number: Int
*/

let number: Int = 10
//number = 9//常量不能改变

定义变量

/*:
定义变量格式
* 声明符号 变量名称: 类型标注
* var number: Int
* 特点: 变量的值可以随意更改
* 注意: 一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型
*/
var number1: Int = 9
number1 = 8

2、类型推断

类型安全

  • Swift 是一个类型安全(type safe)的语言, 它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误
  • swift 对数据类型要求异常严格, swift 中任何时候,都不会做 隐式转换,如果要对不同类型的数据进行计算,必须显示类型转换

注意:

  • 结合数字类常量和变量不同于结合数字类字面量。字面量8可以直接和字面量3.1415926相加,因为数字字面量本身没有明确的类型。它们的类型只在编译器需要求值的时候被推测
  • Double和CGFloat也需要转换

转换示例

let number4 = 7
let number5 = 3.0
//let result = number4 + number5//不能这样,因为类型不一至
//强制转换
let result = Double(number4) + number5

//真实的数值(字面量)本身没有明确的类型,它们的类型只在编译器需要求值的时候被推测.
//任何变量都可单独与字面量想加,不会产生类型冲突
let result1 = number5 + 7
//字面量与字面量间也可相加
let sum = 9.7 + 2

//注意
//Swift中,Double与float CGFloat都是不同类型的,不能相加,要强制转换
let point = CGPointMake(2, 9)
let x: CGFloat = point.x
let temp = 9.2//Double类型
let sumValue = temp + Double(point.y)//把CGFloat转换成Double类开

3、元组

  • 元组(tuples)把多个值组合成一个复合值
  • 将多个相同或者不同类型的值用一个小括号括起来就是一个元祖
  • 元组内的值可以是任意类型,并不要求是相同类型
  • 作为函数返回值时,元组非常有用,可以用来返回多值

注意:

  • 元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构。如果你的数据结构并不是临时使用,请使用类或者结构体而不是元组
//创建元组数据
let tuples = (9.3,2,3)
//访问,通过下标
tuples.0
tuples.1

//指定元素名称
let tuple = (a: 2.3,b: 9)
tuple.a
tuple.b

//:分解元素
let (intValue, doubleValue) = (4, 3.14)
intValue
doubleValue

4、 区间判断

判断区间(...与..<这两个字运算符 不能有空隔)

  • 闭区间: 0...10 取值范围 0~10 包含头包含尾
  • 半闭区间: 0..<10 取值范围 0~9 包含头不包含尾
//let range = 0..<18//半闭区间
//let range = 18..<30
let range = 18...20//闭区间

5、分支(if/三目运算/switch)

5.1 分支if

  • 只能以Bool作为条件语句Swfit中逻辑值只有两个true/false,如果你在需要使用Bool类型的地方使用了非布尔值,Swift 的类型安全机制会报错
  • 条件语句不需要加()
  • {}不能省略
  • Swift中if分支的模式可以使用where语句来判断额外的条件
  • 其它和OCif一样
let number = 10
if number == 10 {
    print(number)
}

if number >= 10 && number <= 20 {
    print("number在10和20之间")
}

5.2 三目运算符

  • 三目运算符的特殊在于它是有三个操作数的运算符, 它简洁地表达根据问题成立与否作出二选一的操作
  • 格式:问题? 答案1 : 答案2
  • 注意:过度使用三目运算符会使简洁的代码变的难懂。我们应避免在一个组合语句中使用多个三目运算符
let value = 2
//?与右括号之间用空格隔开,不然会报错.
//书写,每个字符间尽量都隔开
let result = (value > 1) ? 3 : 9

5.3 Switch

  • case后面可以不添加break,不会贯穿
  • Swift中如果想贯穿必须使用fallthrough
  • Swift中只有满足所有条件才能忽略default,OC中可以不写default
  • OC中default位置可以随便放,Swift不可以
  • OC中在case中定义变量需要加大括号, 否则作用域混乱, Swift不用加大括号
  • Swift中的switch可以判断字符串区间元祖
  • Swift中case 分支的模式可以使用where语句来判断额外的条件
示例1- Switch常规判断
let age = 6
switch age {
case 2,6://case中可以包含多个条件
    print("儿童")
case 12:
    print("小学")
case 18:
    print("成年")
case 20:
    fallthrough//穿透
case 24:
    print("可以结婚了")
//Swift中每一个 case 分支都必须包含至少一条语句
default:
    print("other")

}
示例2- Switch判断元组
let point = (50, 50)
switch point {
case (0, 0):
    print("原点")
    
case (50, 50):
    print("中点")
    
case (100, 100):
    print("右下角")
default:
    print("other")
    
}
示例3- 判断区间
let range = 18...20//闭区间

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

推荐阅读更多精彩内容

  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,271评论 1 27
  • 一直没有时间好好看一下swift,最近复习了一遍语法,这里记录swift学习过程中遇到的一些问题和要点,和Obje...
    bomo阅读 2,332评论 0 25
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,771评论 1 10
  • 我最爱的季节 天空中飘着白色的柳絮或杨絮 你们带着口罩躲闪 而我却希望和他们接触 这些小精灵 那么自由 那么柔软 ...
    四毛不爱流浪阅读 107评论 0 1
  • 1.思考:有的时候,我们会遇到这样的问题,python中常见内置方法如range(),reversed()解决不了...
    panxd阅读 247评论 0 0