今天上午、 继续练习了一下swift

然后 首先打开Xcode6

紧接着 我们创建一个playGround。  playGround不知道的孩子、 去百度给自己科普一下

然后 我们看一下代码 、 跟着打 别赋值粘贴

  1 // Playground - noun: a place where people can play
  2
  3 import UIKit
  4
  5 // HelloWorld
  6 var str = "Hello, playground"
  7
  8 // 常量可以改变值
  9 var myVariable = 42
 10 myVariable = 50
 11 let myConstant = 42
 12
 13 // 指定数据类型
 14 let floatNumber:Float = 4
 15
 16 // 使用强制转换
 17 let lable = "the lable is "
 18 let width = 94
 19 let labelwidth = lable + String(width)
 20
 21 // 使用双引号中的\来转换
 22 let apples = 3
 23 let oranges = 5
 24 let appleSummary = "i have \(apples) apples"
 25 let orangeSummary = "i have \(oranges) oranges"
 26
 27 // 自动识别数据类型加斜杠转换
 28 let somebody = "Alice"
 29 let age = 23.5
 30 let hellosomebody = "\(somebody) is \(age)"
 31
 32 // 数组的初始化以及赋值
 33 var shoppingList = ["Alice", "Dylan"]
 34 shoppingList[1] = "Petit Alice"
 35
 36 // 字典的初始化以及赋值
 37 var occupations = [
 38
 39     "male" : "Alice",
 40     "female" : "Dylan"
 41 ]
 42 occupations["male"] = "Alice.Petit"
 43
 44 // 初始化一个空的数组或者字典
 45 let emptyArray = [String]()
 46 let emptyDictionary = [String:Float]()
 47
 48 // 初始化一个自动识别类型的字典或者数组
 49 let emptyArray_auto = []
 50 let emptyDictionary_auto = [:]
 51
 52 // 控制流 不能省略大括号
 53 let individualScores = [75, 42, 103, 87, 12]
 54 var teamScore = 0
 55 for score in individualScores {
 56     if score > 50 {
 57         teamScore += 3
 58     } else {
 59         teamScore += 1
 60     }
 61 }
 62 teamScore
 63
 64 // 写到这里 突然发现 变量名称直接打出去 就能打印了
 65 let emptyA = ["key": "value"]
 66 emptyA
 67
 68 // 在if条件中 条件必须是bool表达式 输如一个直接score会出错的 看好了  是必须是表达式
 69
 70 // 使用let来标记
 71 var optionalString: String? = "Hello"
 72 optionalString == nil
 73
 74 var optionalName: String? = "John Appleseed"
 75 var getting = "Hello"
 76 optionalName = nil
 77
 78 if let name = optionalName {
 79     getting = "hello, \(name)"
 80 } else {
 81     getting = "hello, Alice"
 82 }
 83
 84 // switch
 85 let vegetable = "red pepper"
 86 switch vegetable {
 87     case "celery":
 88         let vegetableComment = "add some"
 89     case "cummber", "watercress":
 90         let vegetableComment = "this would make a good tea"
 91 case let x where x.hasSuffix("pepper"):
 92     let vegetableComment = "is it a spicy \(x)"
 93 default:
 94     let vegetableComment = "everything tastes good in soup"
 95 }
 96
 97 // 碰到匹配的句子后 switch不会在继续往前走
 98 let interstingNumbers = [
 99     "prime" : [2, 3, 4, 6],
100     "Fibonacci" : [1, 1, 2, 3],
101     "Square" : [1, 4, 5]
102 ]
103
104 var largest = 0
105 var maxtype = ""
106 for (kind, numbers) in interstingNumbers {
107
108     for number in numbers {
109         if number > largest {
110             largest = number
111             maxtype = kind
112         }
113     }
114
115 }
116 largest
117 maxtype
118
119 // while
120 var n = 2
121 while n < 100 {
122     n = n*2
123 }
124 n
125
126 var m  = 2
127 do {
128 m = m*2
129 } while m < 100
130
131 m
132
133 //  注意到了把  while do 不会多循环一次的  他们是等价的
134
135 // ..<
136 var firstForLoop = 0
137 for i in 0..<4 {
138     firstForLoop += i
139 }
140 firstForLoop
141
142 var secondForLoop = 0
143 for var i=0; i<4; i++ {
144     secondForLoop += i
145 }
146 secondForLoop
147
148 var thirdForLoop = 0
149 for i in 0...4 {
150     thirdForLoop += i
151 }
152 thirdForLoop
153
154 // func
155 func greet(name:String, day:String) ->String {
156
157     return "Hello. \(name), today is \(day)"
158 }
159 greet("Alice", "Tuesday")
160
161 func whateating(name:String) ->String {
162     return "\(name) eat what?"
163 }
164 whateating("Alice")
165
166 // 使用元组让一个函数返回多个值
167 func calculateStatistics(scores:[Int]) ->(min: Int, max:Int, sum:Int) {
168     var min = scores[0]
169     var max = scores[0]
170     var sum = 0
171
172     for score in scores {
173
174         if score > max {
175             max = score
176         }
177
178         if score < min {
179             min = score
180         }
181
182         sum += score
183     }
184
185     return (min, max, sum)
186 }
187 let staticArray = [1, 2, 3, 4, 5]
188 calculateStatistics(staticArray)
189 //  返回值可以用点语法单独的取到 也可以用位置
190 calculateStatistics(staticArray).sum
191 calculateStatistics(staticArray).0
192
193 // 函数可以带有可变个数的参数
194 func sumOf(numbers: Int...) ->Int {
195
196     var sum = 0
197     for number in numbers {
198         sum += number
199     }
200     return sum
201 }
202 sumOf(1, 2)
203 sumOf()
204 sumOf(1,2 ,3 ,4,5)
205
206 // 计算参数平均值的联系
207 func acr(number:Int...) ->Float {
208
209     var sum = 0
210     for num in number {
211         sum += num
212     }
213     return Float(sum)/Float(number.count)
214 }
215 acr(1, 2, 3)
216 acr(3, 4)
217
218 // 函数可以嵌套 被嵌套的函数可以访问外侧函数的变量 可以嵌套函数来重构一个太长或者太复杂的函数
219 func returnFifteen() ->Int {
220     var y = 10
221     func add() {
222         y += 5
223     }
224     add()
225     return y
226 }
227 returnFifteen()
228
229 // 函数可以作为另一个函数的返回值
230 func makeIncrementer() ->(Int->Int) {
231
232     func addOne(number: Int) ->Int {
233         return 1 + number
234     }
235     return addOne
236 }
237
238 var increment = makeIncrementer()
239 increment(7)
240
241 // 函数可以当做参数 传入另一个函数
242 func hasAnymatches(list:[Int], condition:Int->Bool) ->Bool {
243
244     for item in list {
245         if condition(item) {
246             return true
247         }
248     }
249     return false
250 }
251
252 func lessThanTen(number: Int) ->Bool {
253     return number < 10
254 }
255
256 var numbers = [20, 19, 2, 12]
257 hasAnymatches(numbers, lessThanTen)
258
259 // 函数实际上是一特殊的闭包 使用{} 来创建一个匿名的闭包 使用int将参数和饭追只类型声明与闭包函数体进行分离
260 numbers.map({
261     (number: Int) -> Int in
262     let result = 3 * number
263     return result
264 })
265
266 numbers.map({
267     (number: Int) -> Int in
268     if number % 2 != 0 {
269         return 0
270     }
271     return 1
272 })
273
274 let mappedNumbers = numbers.map({
275     number in 3 * number
276 })
277 mappedNumbers
278
279 let sortedNumbers = sorted(numbers) {
280     $0 > $1
281 }
282 sortedNumbers
283
284 // 对象和类
285 class Shape {
286     var numberOdSides = 0
287     let testGetNumber = 0
288
289     func setNumber(number: Int) {
290         numberOdSides = number
291     }
292
293     func simpleDescription() ->String {
294
295         return "A shape with \(numberOdSides) sides"
296     }
297 }
298
299 var shape = Shape()
300 shape .setNumber(10)
301 shape .simpleDescription()
302
303 // init
304 class NamedShape {
305     var numberOfSides: Int = 0
306     var name:String
307
308     init(name: String, number:Int) {
309         self.name = name
310         self.numberOfSides = number
311     }
312
313     func simepleDescription() ->String {
314         return "A \(name) with \(numberOfSides) sides"
315     }
316 }
317 var nameShape = NamedShape(name: "Alice", number: 20)
318 nameShape .simepleDescription()
319
320 // 继承
321 class Square: NamedShape {
322     var sidelength: Double
323
324     init(sidelength: Double, name:String, number: Int) {
325
326         self.sidelength = sidelength
327         super.init(name: name, number: number)
328     }
329
330     func area() ->Double {
331
332         return sidelength * sidelength
333     }
334
335     override func simepleDescription() -> String {
336         return "a Square with Sides of Length \(sidelength)"
337     }
338 }
339
340 // getter setter
341 class EquilaterTrabgle: NamedShape {
342
343     var sideLengths: Double = 0.0
344
345     init(side: Double, name: String, number: Int) {
346         self.sideLengths = side
347         super.init(name: name, number: number)
348     }
349
350     var perimeter: Double {
351
352         get {
353             return 3 * sideLengths
354         }
355
356         set {
357             sideLengths = newValue / 3.0
358         }
359     }
360
361     override func simepleDescription() -> String {
362         return "an square triagle with \(sideLengths)"
363     }
364 }
365
366 var triangle = EquilaterTrabgle(side: 3.1, name: "Alice", number: 3)
367 triangle.perimeter
368 triangle.perimeter = 9.9
369 triangle.sideLengths
370 triangle.simepleDescription()
371
372 // 默认的情况相爱 方法的参数名和他们在方法内部的名字一样
373 class counter {
374     var count: Int = 0
375     func incrementBy(amount: Int, numberOfTimes times: Int) {
376         count += amount * times
377     }
378 }
379 var count = counter();
380 count.incrementBy(2, numberOfTimes: 7)
381
382 // 处理变量的可选值的时候。 你可以在操作之前加?之前的值是nil的话那么后边的东西讲不会被执行 否则 ?后边的东西被运行 这种情况下 整个表达式只有一个可选值
383 let optionalSquare: Square = Square(sidelength: 2, name: "Alice", number: 3)
384 let sidelength = optionalSquare.sidelength
385
386 // 枚举和结构体
387 enum Rank: Int {
388
389     case Ace = 1
390     case Two, Three, Four, Five
391     case Jack, Queen
392
393     func simpleDescription() ->String {
394         switch self {
395         case .Ace:
396             return "ace"
397         case .Jack:
398             return "jack"
399         case .Queen:
400             return "queen"
401         default:
402             return String(self.toRaw())
403         }
404     }
405 }
406 let ace = Rank.Ace
407 let aceRowValue = ace.toRaw()
408 ace.simpleDescription()
409
410 // 写一个函数  来比较两个Rank值
411 enum Ranks: Int {
412     case one = 1
413     case two = 2
414     case three = 3
415
416     func sub(number1: Int, number2: Int) ->Int {
417
418         return number1 > number2 ? number1 : number2
419     }
420 }
421 let one = Ranks.one
422 one.sub(10, number2: 2)
423
424 //  使用toRow 和fromRow函数在原始值和枚举值之前轻松的切换
425 if let convertedRank = Rank.fromRaw(3) {
426     let threeDescription = convertedRank.simpleDescription()
427     threeDescription
428 }
429
430 // 枚举的成员是实际值并不是原始值的另一种表达方法 实际上 如果原始值没有意义 你不需要设置
431 enum Suit {
432
433     case Spades, Hearts, Diamonds, Clubs
434
435     func simleDescription() -> String {
436         switch self {
437         case .Spades:
438             return "spa"
439         case .hearts:
440             return "heart"
441         case .Diamonds:
442             return "dia"
443         case .Clubs:
444             return "clubs"
445         }
446     }
447 }
448 let hearts = Suit.Hearts
449 let heartsDescription = hearts.simleDescription()
450
451 // 定义一个结构体 接受上边传来的东西
452 struct Card {
453     var rank: Rank
454     var suit: Suit
455
456     func sipleDescription() ->String {
457         return "\(rank), \(suit)"
458     }
459 }
460 let thspeed = Card(rank: .Three, suit: .Spades)
461 let thspeeds = thspeed.sipleDescription()
462 thspeeds
463 thspeed
464
465 // 通过枚举 区别正确或者错误信息
466 enum ServerResponse {
467     case Result(String, String)
468     case Error(String)
469 }
470
471 let success = ServerResponse.Result("Alice", "Dylan")
472 let failure = ServerResponse.Error("Error")
473
474 switch success {
475 case let .Result(sunrise, sunset):
476     let serverResponse = "\(sunrise), \(sunset)"
477 case let .Error(error):
478     let serverResponse = "Failure .. \(error)"
479 }
480
481 // 协议和扩展
482
483 // 首先  使用protocal来申明一个协议
484 protocol ExamplepRrotocol {
485     var simpleDescription: String {
486         get
487     }
488     mutating func adjust()
489 }
490
491 // 类 枚举 结构体都可以实现协议
492 class SimoleClass: ExamplepRrotocol  {
493     var simpleDescription: String = "A very petit girl"
494     var anotherpRroperty: Int = 69105
495     func adjust() {
496         simpleDescription += "Alice"
497     }
498 }
499
500 var a = SimoleClass()
501 a.adjust()
502
503 let aDescription = a.simpleDescription
504
505 struct SimpleStructure : ExamplepRrotocol{
506     var simpleDescription: String = "Alice"
507     mutating func adjust() {
508         simpleDescription += ".Dylan"
509     }
510 }
511
512 var b = SimpleStructure()
513 b.adjust()
514 let bDescription = b.simpleDescription
515
516 // extension 为现有的类型添加功能
517 //extension Int: ExamplepRrotocol {
518 //    var simpleDescription: String {
519 //        return "the number \(self)"
520 //    }
521 //}

ok 大家又会有个提升。  加油喽

转载于:https://www.cnblogs.com/Dylan-Alice/p/Swift_Strong.html

Swift基础加强_跟我打500行相关推荐

  1. 2个字符串相等 swift_Swift快速入门(一)之 Swift基础语法

    Swift快速入门(一)之 Swift基础语法 近期重新学习了一遍Swift语言,主要以<Swift编程权威指南(第2版)>为教程,学习过程中结合比对Java语言特性将学习心得作为三篇笔记 ...

  2. Swift基础入门知识学习(12)-枚举(列举)-讲给你懂

    TED演讲的8个秘诀:学习18分钟高效表达-重点笔记 Swift基础入门知识学习(11-2)-閉包-第二篇-讲给你懂 目录 枚举(列举)语法 使用 Switch 语句匹配枚举(列举)值 相关值 原始值 ...

  3. 从零开始的iOS开发:00 | Swift基础语法(上)

    目录 一.开发环境 二.关于Swift (一)Swift简介 (二)Swift特性 (三)结语 三.Swift基础语法 (一)编程准备 (二)Hello,world! (三)简单值 1.变量与常量 2 ...

  4. 黑马程序员Java零基础视频教程_下部(P135-P200)

    黑马程序员Java零基础视频教程_下部(P135-P200) 1 多线程 1.1 什么是多线程? 1.2 多线程的并发与并行 1.3 多线程的实现方式 1.3.1 继承Thread类的方式进行实现 1 ...

  5. Swift基础入门知识学习(7)-字典-讲给你懂

    Swift基础入门知识学习(6)-数组(阵列)-讲给你懂 目录 声明字典 创建一个空字典 存取与修改字典 使用for-in遍历字典中的所有值 字典转换为数组 Swift字典(dictionary) 用 ...

  6. 黑马程序员Java零基础视频教程_上部(P1-P80)

    黑马程序员Java零基础视频教程_上部(P1-P80) 1. Java入门 1.1 Java学习介绍 1.2 Java人机交互 1.2.1 常用CMD命令 2. Java基础学习 2.1 Java入门 ...

  7. 01_Linux系统管理_基础知识_高级文件系统管理_磁盘配额(quota)

    环境 虚拟机:VMware-10.0.7 build-2844087 Linux系统:CentOS 6.8 远程工具:Xshell 6 (Build 0197) 01_Linux系统管理_基础知识_高 ...

  8. Swift基础 - - 高德地图实践

    高德地图开发需要自己到官网http://lbs.amap.com/console/ 注册一个ak,新建一个swift工程,然后在Info.plist中添加一个NSLocationAlwaysUsage ...

  9. linux基础知识_压缩—进程管理-网络管理-ftp-nfs-ssh-scp

    linux基础知识_压缩-进程管理-网络管理-ftp-nfs-ssh-scp 1.压缩包管理 gzip .gz格式的压缩包,不打包,分别压缩,原文件消失 bzip2 .bz2格式的压缩包,原文件不会消 ...

最新文章

  1. 基于 OpenCV 的人脸追踪
  2. LeetCode Minimum Path Sum(动态规划)
  3. 1.8 Java字节流和字符流的区别,如何区分输入流和输出流?
  4. AssetBundle
  5. troubleshoot之:用control+break解决线程死锁问题
  6. ajax从mysql提取数据在html中_提取图片中数据的科研利器
  7. Hadoop Ecosystem解决方案---数据仓库
  8. arduino tft 方向_ESP32在Arduino环境下玩转 LVGL,ESP32移植LVGL详细教程
  9. Moto One Pro渲染图曝光:潮流“浴霸”四摄加持
  10. iscsi:IO操作流程(四)
  11. 计算机电缆检测报告,天联牌计算机电缆详细介绍
  12. celery 4.1下报kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable 处理方式...
  13. Linux内核安全模块学习-导言
  14. 【平面设计】ACDSee 10.0 软件安装教程
  15. 刘宇凡:七夕,听说爱情曾来过
  16. hioki电阻测试仪3540软件,微电阻计/电阻测试仪/HIOKI 3540/HIOKI 3560/日置3540/日置3560...
  17. 获取 公众号 二维码 的方法
  18. lol提示游戏环境异常重启计算机,出现LOL游戏环境异常请重启机器怎么解决?
  19. 2022年全球与中国PLC光分路器市场现状及未来发展趋势
  20. 物联网——完全开源物联网基础平台

热门文章

  1. 关于dlopen函数分析
  2. 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航
  3. 关于C#winform程序运行无异常,在生成安装文件安装后提示水晶报表加载失败,系统找不到指定的路径的解决方法...
  4. python替代goto_如何在 Python 中实现 goto 语句
  5. cmd无法运行python_通过Java-%1在cmd中运行python文件不是有效的Win32应用程序 - java...
  6. ewsa 字典_汉语字典小程序
  7. js 根据公历日期 算出农历_给孩子过农历生日,还是阳历生日?家长不要盲从,看看这些再决定...
  8. python爬取系统_python应用:爬虫框架Scrapy系统学习第四篇——scrapy爬取笔趣阁小说...
  9. 02数据库表的相关操作
  10. 通常所说的pc机是指微型计算机,2017年自考计算机应用基础精选习题及答案(1)