Swift教程_零基础学习Swift完整实例(二)_swift基础(简单值、控制流、方法和闭包)

简介:

三、Swift基础介绍

本章将对Swift做一个简单说明,内容取自《The Swift Programming Language》,并加之自己的理解。
首先swift全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main方法。你同样不需要在每个语句结尾写上分号。而且提供了playground可以在编辑代码实时看到效果,可以在xcode中new一个playground然后体验一下。如图。


以下代码的运行都可以通过playground快捷显示,这个功能对于学习来说还是非常好的。

1.简单值(Simple Values)

let声明常量:你只需要决定一次,但是需要使用很多次。
var声明变量
1.常量或者变量的类型要和赋给它们的值一样。声明的同时赋值的话,编译器会自动推断类型,称为隐示指定。也可以用:显示指定类型,如下:
[objc]  view plain  copy
  1. let implicitInteger = 70  
  2. var implicitDouble = 70.0  
  3. let explicitDouble: Double = 70  

2.值不会被隐式转换为其他类型,只能显式转换。如下:

[objc]  view plain  copy
  1. let label = "The width is"  
  2. let width = 94  
  3. let widthLabel = label + String(width)  

3.还可以使用\()进行转换,如下:

[objc]  view plain  copy
  1. let apples = 3  
  2. let oranges = 5  
  3. let fruitSummary = "I have \(apples + oranges) pieces of fruit."  

4.和Java类似,使用方括号[][:]来创建数组和字典,如下:

[objc]  view plain  copy
  1. var shoppingList = ["catfish""water""tulips""blue paint"]  
  2. shoppingList[1] = "bottle of water"//[catfish, bottle of water, tulips, blue paint]  
  3. var occupations = [  
  4.     "Malcolm""Captain",  
  5.     "Kaylee""Mechanic",  
  6. ]  
  7. occupations["Jayne"] = "Public Relations" //[Kaylee: Mechanic, Malcolm: Captain, Jayne: Public Relations]  
  8. let emptyArray = [String]()//老版本为<span style="font-family: Arial, Helvetica, sans-serif;">String[]</span>  
  9. let emptyDictionary = Dictionary<String, Float>() //空数组和空字典初始化  
  10. shoppingList = []  //如果类型信息可以被推断出来,可以直接创建空数组和空字典  

2.控制流(Control Flow)

使用if elseswitch case来进行条件操作,使用for-inforwhiledo-while来进行循环。

1.包裹条件和循环变量的小括号可以省略,语句体的大括号是必须的。

2.if语句中,条件必须是一个Bool表达式,不会隐形地与0做对比,if score { ... }不会通过编译。

3.在变量的类型后面加一个?来标记这个变量的值是可选的,可选值是一个具体的值或者是nil(表示值缺失)。

[objc]  view plain  copy
  1. var optionalName: String? = "John Appleseed"//可选值  
  2. var greeting = "Hello!"  
  3. if let name = optionalName {//optionalName 为nil时,if的条件会返回false,不会执行大括号中的代码  
  4.     greeting = "Hello, \(name)"  
  5. }  

4.switch支持任意类型的数据以及各种比较操作,不仅仅是整数以及测试相等。成功运行case后,程序会退出switch语句,不需要在每个子句结尾写break

[objc]  view plain  copy
  1. let vegetable = "red pepper"  
  2. switch vegetable {  
  3. case "celery":  
  4.     let vegetableComment = "Add some raisins and make ants on a log."  
  5. case "cucumber""watercress"://或的关系  
  6.     let vegetableComment = "That would make a good tea sandwich."  
  7. case let x where x.hasSuffix("pepper"):  
  8.     let vegetableComment = "Is it a spicy \(x)?"  
  9. default:  
  10.     let vegetableComment = "Everything tastes good in soup."  
  11. }  
5.你可以使用for-in来遍历字典,需要两个变量来表示每个键值对。
[objc]  view plain  copy
  1. let interestingNumbers = [  
  2.     "Prime": [235711, 13],  
  3.     "Fibonacci": [11235, 8],  
  4.     "Square": [14916, 25],  
  5. ]  
  6. var largest = 0  
  7. for (kind, numbers) in interestingNumbers {  
  8.     for number in numbers {  
  9.         if number > largest {  
  10.             largest = number  
  11.         }  
  12.     }  
  13. }  
6.你可以在循环中使用..来表示范围(使用..<不包含上界,...包含上界
[objc]  view plain  copy
  1. var loop = 0  
  2. for i in 0..<3 {//相当于for var i = 0; i < 3; ++i,老版本为..  
  3.     loop += i  
  4. }  
  5. for i in 0...3{//相当于for var i = 0; i <= 3; ++i  
  6.     loop += 1  
  7. }  

3.方法和闭包(Functions and Closures)

1.使用func来声明一个方法,使用名字和参数来调用方法(使用...作为可变参数,用一个数组来获取它们)。使用->来指定方法返回值(可返回多个值)。

[objc]  view plain  copy
  1. func greet(name: String, day: String) -> String {  
  2.     return "Hello \(name), today is \(day)."  
  3. }  
  4. greet("Bob""Tuesday")  
  5. func getGasPrices() -> (Double, Double, Double) {  
  6.     return (3.593.693.79)  
  7. }  
  8. getGasPrices()  
  9. func sumOf(numbers: Int...) -> Int {  
  10.     var sum = 0  
  11.     for number in numbers {  
  12.         sum += number  
  13.     }  
  14.     return sum  
  15. }  
  16. sumOf()//0  
  17. sumOf(4259712)//651  
 
  

2.方法可以嵌套。被嵌套的方法可以访问外部方法的变量,你可以使用嵌套方法来重构一个太长或者太复杂的方法

[objc]  view plain  copy
  1. func returnFifteen() -> Int {  
  2.     var y = 10  
  3.     func add() {  
  4.         y += 5  
  5.     }  
  6.     add()  
  7.     return y  
  8. }  
  9. returnFifteen()//15  

3.方法可以作为另一个方法的参数和返回值。

[objc]  view plain  copy
  1. func makeIncrementer() -> (Int -> Int) {  
  2.     func addOne(number: Int) -> Int {  
  3.         return 1 + number  
  4.     }  
  5.     return addOne  
  6. }  
  7. var increment = makeIncrementer()  
  8. increment(7)//8  
  9. func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool {  
  10.     for item in list {  
  11.         if condition(item) {  
  12.             return true  
  13.         }  
  14.     }  
  15.     return false  
  16. }  
  17. func lessThanTen(number: Int) -> Bool {  
  18.     return number < 10  
  19. }  
  20. var numbers = [20197, 12]  
  21. hasAnyMatches(numbers, lessThanTen)//true  

4.方法实际上是一种特殊的闭包,你可以使用{}来创建一个匿名闭包。使用in来分割闭包的描述以及代码段。

[objc]  view plain  copy
  1. numbers.map({  
  2.     (number: Int) -> Int in  
  3.     let result = 33 * number  
  4.     return result  
  5. })  


原文地址:http://blog.csdn.net/ooppookid/article/details/40321473
相关文章
|
5月前
|
Swift
Swift的控制流语句
Swift的控制流语句
33 3
|
4月前
|
存储 Swift
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
38 1
|
5月前
|
Swift
Swift 的控制流结构
Swift 的控制流结构
23 1
|
5月前
|
存储 Swift
Swift中,函数和闭包
Swift中,函数和闭包
34 1
|
5月前
|
IDE 开发工具 Swift
Swift语言的教程
Swift语言的教程
50 1
|
7月前
|
Swift
swift 闭包简写实际参数名$0、$1等理解
swift 闭包简写实际参数名$0、$1等理解
31 0
|
Swift 开发者
Swift - swift3.0中代理方法的使用
Swift - swift3.0中代理方法的使用
52 0
|
Swift 索引
Swift - 字典排序方法
Swift - 字典排序方法
129 0
|
C# Swift
深入浅出Swift(2)—— 控制流
深入浅出Swift(2)—— 控制流
52 0
|
Swift
OC 和 swift 创建单例方法
OC 和 swift 创建单例方法
289 0