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

来源:互联网 发布:ipad下载旧版本软件 编辑:程序博客网 时间:2024/04/27 23:44

三、Swift基础介绍

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


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

1.简单值(Simple Values)

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

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

let label = "The width is"let width = 94let widthLabel = label + String(width)

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

let apples = 3let oranges = 5let fruitSummary = "I have \(apples + oranges) pieces of fruit."

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

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

2.控制流(Control Flow)

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

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

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

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

var optionalName: String? = "John Appleseed"//可选值var greeting = "Hello!"if let name = optionalName {//optionalName 为nil时,if的条件会返回false,不会执行大括号中的代码    greeting = "Hello, \(name)"}

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

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

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

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

func greet(name: String, day: String) -> String {    return "Hello \(name), today is \(day)."}greet("Bob", "Tuesday")func getGasPrices() -> (Double, Double, Double) {    return (3.59, 3.69, 3.79)}getGasPrices()func sumOf(numbers: Int...) -> Int {    var sum = 0    for number in numbers {        sum += number    }    return sum}sumOf()//0sumOf(42, 597, 12)//651

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

func returnFifteen() -> Int {    var y = 10    func add() {        y += 5    }    add()    return y}returnFifteen()//15

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

func makeIncrementer() -> (Int -> Int) {    func addOne(number: Int) -> Int {        return 1 + number    }    return addOne}var increment = makeIncrementer()increment(7)//8func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool {    for item in list {        if condition(item) {            return true        }    }    return false}func lessThanTen(number: Int) -> Bool {    return number < 10}var numbers = [20, 19, 7, 12]hasAnyMatches(numbers, lessThanTen)//true

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

numbers.map({    (number: Int) -> Int in    let result = 3 * number    return result})

点击进入ooppookid的博客

0 0
原创粉丝点击