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


三、Swift基础介绍

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

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

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

1.简单值(Simple Values)

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

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

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

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

let apples = 3
let oranges = 5
let 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 = 0
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}
6.你可以在循环中使用..来表示范围(使用..<不包含上界,...包含上界
var loop = 0
for 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()//0
sumOf(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)//8
func 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的博客

你可能感兴趣的:(ios,技术,xcode,swift,Object-C)