1 import Foundation
2
3
4
5 //打印函数
6
7 print("Hello, World!")
8
9
10
11 //不用加分号, 字符串就是"", 不用加@
12
13 print("41班, 先有创神后有天")
14
15
16
17 //类型推断: swift会根据初始值类型, 推断常量, 变量的数据类型
18
19 //常量和变量
20
21
22
23 //常量
24
25 //常量的定义前面都要加 let
26
27 let a = 10
28
29
30
31 //变量
32
33 //变量的定义前面都要加 var
34
35 var b = 20
36
37 b = 30
38
39
40
41 //类型声明
42
43 //类型安全: 实际类型 和 声明类型必须一致.
44
45 var c : Int = 30
46
47
48
49 //swift 命名比较随意
50
51 //不要以阿拉伯数字靠头
52
53 var 闯神 = 100.0
54
55 print(闯神)
56
57
58
59 let 😄 = 10
60
61 print(😄)
62
63 let 呵呵 = "😄"
64
65 print(呵呵)
66
67
68
69 //字符串
70
71 var str: NSString = "不要连我的投影"
72
73 print(str.stringByAppendingString("123"))
74
75
76
77 //数组
78
79 var array = ["123"]
80
81 print(array)
82
83 print(array[0])
84
85 //往可变数组内添加元素
86
87 array.append("1")
88
89 //删除数组中的元素
90
91 array.removeAtIndex(0)
92
93 print(array,"\n",str)
94
95 //修改数组内元素
96
97 array[0] = "swift 保平安";
98
99 print(array)
100
101
102
103 //字典
104
105 var dictionary = ["name":"龙神", "age":18]
106
107 //修改元素
108
109 dictionary.updateValue("81", forKey: "age")
110
111 print(dictionary)
112
113 //增加元素
114
115 //updateValue方法: 如果key存在就进行更新value, 如果key不存在, 就添加元素
116
117 dictionary.updateValue(168, forKey: "height")
118
119 print(dictionary)
120
121 //删除元素
122
123 dictionary.removeValueForKey("height");
124
125 print(dictionary)
126
127 //获取value
128
129 //可选类型: 如果有值, 就是值本身, 如果没有值的话, 就是nil
130
131 let value = dictionary["nam"]
132
133 //如果确定有值, 可以进行强制解析,强制解析的方法为 !.
134
135 // print(value!)
136
137 //如果不确定有值, 就要使用隐式解析, 解析方式如下:
138
139 if let v = value {
140
141 print(v)
142
143 } else {
144
145 print("没有取到值")
146
147 }
148
149
150
151 //自定义一个可选类型的变量
152
153 var 可选类型的变量 : Int?
154
155 可选类型的变量 = 123
156
157 print(可选类型的变量)
158
159
160
161 //+ - * / % 三目运算
162
163 let aa = 10
164
165 let bb = 20
166
167 let cc = aa - bb
168
169 print(cc)
170
171 let dd = aa * bb
172
173 print(dd)
174
175 print(aa/bb)
176
177 //swift可以对浮点型取余
178
179 //C语言是不可以的
180
181 print(10 % 3.5)
182
183 //+除了运算, 可以实现字符串拼接
184
185 let 班 = "41 - "
186
187 let name = "闯神"
188
189 print(班 + name)
190
191
192
193 //三目运算
194
195 let sum = 100
196
197 sum >= 10 ? print("sum比较大"):print("10比较大")
198
199
200
201 //分支结构
202
203 //if...else
204
205 if(sum > 10){
206
207 print("sum > 10")
208
209 } else {
210
211 print("sum <= 10")
212
213 }
214
215
216
217 //for循环
218
219 for var i = 0; i < 10; i++ {
220
221 //字符串拼接
222
223 print("i = \(i)")
224
225 }
226
227
228
229 //区间[0, 20]
230
231 //闭区间
232
233 for j in 0...8 {
234
235 print("j = \(j)")
236
237 }
238
239
240
241 //区间[8, 20)
242
243 for k in 8..<20 {
244
245 print("k = \(k)")
246
247 }
248
249
250
251 //while
252
253 var num = 10
254
255 while num > 0 {
256
257 print("num = \(num)")
258
259 num--
260
261 }
262
263
264
265 //repeat...while = do...while
266
267 //不管条件是否满足, 都要先走一次
268
269 var n = 150
270
271 repeat {
272
273 print("闯神身高 = \(n) cm")
274
275 n++
276
277 } while(n < 170)
278
279
280
281 //switch...case
282
283 //每个条件语句结束部分不需要添加break, 会自动中止匹配
284
285 let hobby = "扫雷"
286
287 switch hobby {
288
289 case "LOL":
290
291 print("龙神爱玩LOL")
292
293 case "World Of Warcraft":
294
295 print("龙神爱玩魔兽世界")
296
297 default :
298
299 print("龙神爱玩其他游戏")
300
301 }
302
303
304
305 //定义一个新的常量/变量, 在 case 内把匹配数据接收, 恒成立, 所以下面代码不会执行
306
307 let interest = "烫头"
308
309 switch interest {
310
311 case let x:
312
313 print("闯神爱\(x)")
314
315 case "唱歌":
316
317 print("闯神爱唱歌")
318
319 default:
320
321 print("闯神爱睡觉")
322
323 }
324
325
326
327 //switch条件匹配
328
329 //在where后面添加条件
330
331 //如果满足, 才能走这个语句
332
333 let x = 160
334
335 switch x {
336
337 case let y where y > 150:
338
339 print("闯神身高大于150, 实际身高\(y)cm")
340
341 default:
342
343 print("闯神不足150cm!")
344
345 }
346
347
348
349 //穿过
350
351 let xx = "女朋友"
352
353 switch xx{
354
355 case "女朋友":
356
357 print("蒋飞有\(xx)")
358
359 fallthrough
360
361 case "宗主":
362
363 print("蒋飞有宗主")
364
365 fallthrough
366
367 default:
368
369 print("蒋飞有手")
370
371 }
372
373
374
375 //元祖
376
377 let tuples = ("404", "网站无法打开")
378
379 print(tuples.1)
380
381 let personTuples = (万少:4121980, 大妈:41272609, 李阳:4101950)
382
383 print(personTuples.大妈)
384
385
386
387 //函数
388
389 //定义一个函数
390
391 //无参无返回
392
393 func helloworld(){
394
395 print("hello world")
396
397 }
398
399 helloworld()
400
401 //有参无返回
402
403 func helloKitty(name:String){
404
405 print("广恩结婚对象的名字是: \(name)")
406
407 }
408
409 helloKitty("我不知道")
410
411
412
413 //无参有返回
414
415 func helloXuehua()->String {
416
417 return "你买单, 我就来"
418
419 }
420
421
422
423 let xuehua = helloXuehua()
424
425 print("雪华说:"+xuehua)
426
427
428
429 //有参有返回
430
431 func lotteryLanou(name:String)->String{
432
433 if(name == "我"){
434
435 return "U 盘"
436
437 }else if(name == "范玉珍"){
438
439 return "iWatch"
440
441 }else{
442
443 return "iPad"
444
445 }
446
447 }
448
449 print(lotteryLanou("其他"))
450
451
452
453 //外部参数(脾气)
454
455 func jinhua(脾气 piqi:String){
456
457 print("金华脾气\(piqi)")
458
459 }
460
461 jinhua(脾气:"好!")
462
463
464
465 func sum(a:Int, b:Int)->Int{
466
467 return a+b
468
469 }
470
471 print(sum(10,b: 20))
472
473
474
475 //参数默认值
476
477 func multiply(a:Int, b:Int = 10){
478
479 print("积为\(a*b)")
480
481 }
482
483 multiply(200)
484
485 //布尔值在 swift内只有两个值
486
487 //真为 true
488
489 //假为 false
490
491 func autobiography(name:String, age:Int, gender:Bool){
492
493 let 性别 = (gender == true ? "男":"女")
494
495 print("我叫\(name),\(性别),\(age)岁")
496
497 }
498
499 autobiography("李松",age:18,gender:true)
500
501 //函数类型
502
503 // (Int)->Int
504
505 func getName(a:Int)->Int{
506
507 return 10;
508
509 }
510
511
512
513 func getAge(a:Int)->Int{
514
515 return 100;
516
517 }
518
519
520
521 //初始化一个类型为 (Int)->Int 类型的函数变量
522
523 //写法1
524
525 //var fu:(Int)->Int = getAge
526
527 //print(fu(123))
528
529
530
531 //类型别名
532
533 //函数类型包括两部分, (参数类型,....)->返回值类型, 也就是说具有相同参数和返回值的函数是同一个类型的
534
535 //写法2
536
537 typealias 整型 = Int
538
539 typealias 函数类型1 = (整型)->整型
540
541 var fu:函数类型1 = getAge
542
543 print(fu(123))
544
545
546
547 //函数作为函数的参数
548
549 func firstDem(a:Int){
550
551
552
553 }
554
555 print(firstDem(10))
556
557
558
559 func firstFunc(nielei:函数类型1){
560
561
562
563 print("firstFunc = \(nielei(123))")
564
565 }
566
567 firstFunc(getName)
568
569
570
571
572
573 //函数作为函数的参数
574
575 func second(a : Int)->Int{
576
577 return a * 100
578
579 }
580
581
582
583 func second2(a:Int)->Int{
584
585 return a * 3
586
587 }
588
589
590
591 func secondFun(f1 : (Int)->Int)->Int {
592
593 return f1(20)
594
595 }
596
597 print(secondFun(second2))
598
599
600
601 //函数作为函数的返回值
602
603 func third1(){
604
605 print("闯神不帅")
606
607 }
608
609 func third2(){
610
611 print("我真帅")
612
613 }
614
615
616
617 //重定义()->()类型
618
619 typealias functionType2 = ()->()
620
621 func thirdFunc(f1:functionType2, f2:functionType2, b:Bool)->functionType2{
622
623 return b == true ? f1 : f2
624
625 }
626
627 //resultFunction 是个函数
628
629 let resultFunction = thirdFunc(third1, f2: third2, b: false)
630
631 //调用函数
632
633 resultFunction()
634
635
636
637 //函数嵌套定义
638
639 typealias functionType3 = (Int)->()
640
641 func bigFunc(b:Bool)->(Int)->(){
642
643 func smallFunc1(a:Int)->(){
644
645 print("大妈今年\(a)岁")
646
647 }
648
649 func smallFunc2(a:Int)->(){
650
651 print("大妈明年\(a + 1)岁")
652
653 }
654
655 return b == true ? smallFunc1 : smallFunc2
656
657 }
658
659 let resultFunc2 = bigFunc(true)
660
661 resultFunc2(17)
662
663