swift基础语法可以在playground中编写,这样直接可以在右侧看到结果,不需要运行
1.1标识符
定义标识符时,必须指出是变量还是常量
格式:标识符 : 类型
let定义常量,一旦定义就不可更改
var定义变量,可以更改
let age : Int = 30
let n : Double = 3.00
var age :Int = 30
变量和常量的命名
let pi = 3.13
let 你好 = "你好世界"
let = "monkey"
let n123 = "sss"
在命名一个编程元素时,要遵循下列命名规则:
名称的第一个字符必须是字母或汉字。
不能在名称中使用空格、句点(.)、感叹号(!)、@、&、$、#等已有特殊含义的字符。
3.不能超过255个字符,控件、窗体、类和模块的名字,不能超过40个字符。不要与已有的关键字同名,否则,在编程中会出现很多麻烦。
-
在自定义名称时,除了必须遵循VB的命名规则外,还要使一个名字能反映它所代表的编程元素的意义
注意:
1.在开发中优先使用常量,只有在需求更改的时候,在将let改为var
2.常量的意思是:指向的对象不可修改,即指针不可修改,但是可以通过指针拿到对象,修改其中的属性let view : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view.backgroundColor = UIColor.redColor()//在swift中使用枚举类型,类型.具体的类型
let btn : UIButton = UIButton(type: UIButtonType.ContactAdd)
btn.center = CGPoint.init(x: 50, y: 50)
view.addSubview(btn)
1.2Swift的类型推导
1.如果定义标识符时,直接赋值,那么标识符后面的类型可以省略
2.Swift中有类型推导,可以根据后面的赋值决定前面标识符的数据类型
3.可以通过option + 鼠标左键,进行查看数据的类型
2.Swift中的数据类型
类型转换:
1.将Double类型转换为Int类型,Int(Double)
哎,前面截图截到了,还要写么,好纠结啊......写,不写,写,不写,算了还是写吧~
let dou1 = Int(Double)
2.将Int转换为String , Int(String)
let doub2 = String(dou1)
3.将String转换为Float类型,String(Float)
let doub3 = Float(doub2)
格式我就不总结了........
3.判断
3.1if 语句
要求:
1.判断句可以不加()
2.判读句必须有一个真假值(哦~,忘记说了,Swift中Bool类型,真为true,假为false)
格式:
if 条件 {
若条件为真则执行这部分语句
} else {
若条件为假则执行这部分语句
}
看到这里你一定困了吧,我也困了,所有就不举例子了,相信你也会的
3.2 guard
1.guard是swift2.0新增的语法,与if非常相似,其设计的目的是提高程序的可读性
2.guard语句必须自带其好基友else
格式:
guard 条件表达式 else{
break
}
语句组
语法:
1.当条件表达式为true的时候,跳过else语句的内容,直接执行语句组
2.条件表达式为false的时候,执行else语句的内容,其跳转语句一般为return ,break,continue和throw
3.guard在函数里面使用,不在函数里使用return ,break.....就不知道该干啥了
人吧,一困就懒,这个我也不想举例子了....,但是我怕你直接关网页,这个威胁很厉害的,所有................
补充知识:
swift中控制转移关键词:
break continue fallthrough return throw
1.return :可以结束一个循环,或者函数
2.break语句将终止整个循环的执行,可以在循环语句中,也可以用于switch语句中
3.continue:通常用于循环中,告诉循环停止现在执行的语句,开始下一次循环
//func 函数名(标示符: 类型) ->
func sleep(time: Int) -> Bool {
guard time >= 22 else{
//如果判断就为假,会执行else
print("困着")//print后面会有自动换行符的
return true
}
//如果为真,继续执行
print("睡觉")
return false
}
sleep(20)
现在过20点了,因为使用的是return语句,所以只会说困着,所有困但是不让走睡觉,这个男朋友当的不行,所有困了不让睡觉一定是错的,女朋友可是会生气的
正好对比下guard和if的区别
if语句
for a in 0...4
{
if a == 2{
continue
print(a) //这条语句用户不会被执行
}
print(a) //输出0,1,,3,4
}
guard语句
for a in 0...4{
guard a != 2 else{
continue
print(a) //这条语句永远不会被用户执行
}
print(a) //输出0,1,3,4
}
break:
//if语句
for a in 0...3{
if a == 2{
break
}
print(a) //输出0,1
}
//guard语句
for a in 0...3{
guard a != 2 else{
print(a)
break
}
print(a) //输出0,1
}
你问我...什么意思,那就涉及令一个话题了,那个话题就是区间
区间分为开区间和毕区间
开区间: 0~10,包括0但是不包括10,跟数学中的开区间是不同的,这个是前毕后开的,[0,10], Swift中写法就是0..<10(中间都不要空格,有空格就会报错的)
闭区间:0~10,包括0也包括10,是前闭后闭的,Swift中写法 0...10
3.3 switch
先比较和OC中的不同:
1.switch后可以不加()
2.case后面可以不跟break,默认会有break的
3.switch中要把所有情况都列举出来,不然会报错的
switch的基本用法:
let sex = 0
switch sex{
case 0:
print("男")
case 1:
print("女")
default:
print("未知")
}
switch:case穿透
要实现这个效果,需要另外一个关键字fallthrough
fallthrough:由于switch中的switch语句不会自动的因为没有break而跳转下一个case,因此如果想要像C语言那样,一次执行每一个case就需要fallthrough
switch sex{
case 0:
print("ddd")
fallthrough
case 1:
print("ssss")
default:
print("")
}
3.case中判断多个条件
switch sex{
case 0, 1:
print("正常")
default:
print("")
}
4.判断浮点型(OC中只能判断基本数据类型)
let a = 3.14
switch a{
case 3.14:
print("pi")
default:
print("no pi")
}
5.判断字符串
let a = "pi"
switch a{
case "pi":
print("pi")
default:
print("no pi")
}
6.判断区间:
let score = 88
switch score {
case 0..<60 :
print("不及格")
case 60..<70:
print("刚及格")
case 70..<90:
print("良好")
case 90...100:
print("优秀")
default:
print("错误")
}
序号写到哪里了,你不记得了吧,恩那太好了,我也不记得了,就随便写了~~~
4.循环
4.1 for循环
先说我们在OC中常规的写法:
for (var i = 0 ; i < 10; i++){
print(i)
}
相信你在Swift中这样写,编译器一定会给你提示的,让你改,因为他觉得写得太繁琐了
试试我们第二种写法
for i in 0..<10{
print(i)
}
还有一种写法,当我们不关心i是什么的时候,就直接可以使用'_'来代替'i'
for _ in 0..<10{
print("hello world")
}
4.2while循环,跟OC中差别不大,不解释
4.3do ....while循环
var s = 0
do {
s += 1;
print(s)
}while (s == 10)
这样写,编译器会给你提示,使用编译器提示的就对了,do.....while正式改名为repeat......while了,还是原来的味道,还是原来的配方.
9.20更新
swift中跳出 双层循环:
findAnswer: for m in 1...300{
for n in 1...30{
if m*m*m*m - n*n == 15*m*n{
print(m , n)
break findAnswer //跳出整个循环,想当与C语言中的goto语句不建议使用
}
}
}
switch case 中进行解包
let point5 = (8,0)
switch point5 {
case (0,0):
print ("It's origin")
case (let x , 0)://这种形式可以理解为任意x的值,y的值为0,与使用_忽略x值不同,把x的值赋给新生成的变量,下面可能使用这个变量
print("It on the x-axis")
print("The x value is \(x)")
// fallthrough //可以跳进下一个case
case (0, let y):
print("The y value is \(y)")
case (let x, let y):
break
}
where与模式匹配
let point4 = (3, 3)
switch point4{
case let (x, y) where x == y: //限制case所列出的模式
print("It's on the line x == y")
case let (x, y) where x == -y:
print("It's on the line x == -y")
case let (x, y):
print("It's just an ordinary point")
print("The point is (\(x), \(y))")
}
let age = 19
switch age{
case 10...19:
print("You're a teenager")
default :
print("You're not a teenager")
}
//模式样放在前面等于的变量要放在后面 if case 用法
if case 10...19 = age{
print("You're a teenager")
}
if case 10...19 = age where age > 18{
print("")
}
//
let vector = (4,0)
if case (let x, 0) = vector where x > 2 && x < 5{
print("It's the vector")
}
//
for i in 1...100{
if i % 3 == 0{
print(i)
}
}
for case let i in 1...100 where i % 3 == 0{
print(i)
}