Swift基础语法(-)

swift基础语法可以在playground中编写,这样直接可以在右侧看到结果,不需要运行

新建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"

在命名一个编程元素时,要遵循下列命名规则:

  1. 名称的第一个字符必须是字母或汉字。

  2. 不能在名称中使用空格、句点(.)、感叹号(!)、@、&、$、#等已有特殊含义的字符。
    3.不能超过255个字符,控件、窗体、类和模块的名字,不能超过40个字符。

  3. 不要与已有的关键字同名,否则,在编程中会出现很多麻烦。

  4. 在自定义名称时,除了必须遵循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 + 鼠标左键,进行查看数据的类型


查看数据类型.png

2.Swift中的数据类型

Swift中数据类型.png

类型转换:
1.将Double类型转换为Int类型,Int(Double)
哎,前面截图截到了,还要写么,好纠结啊......写,不写,写,不写,算了还是写吧~


1
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语句,所以只会说困着,所有困但是不让走睡觉,这个男朋友当的不行,所有困了不让睡觉一定是错的,女朋友可是会生气的


2.png

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

推荐阅读更多精彩内容