三、Swift基础介绍
本章将对Swift做一个简单说明,内容取自《The Swift Programming Language》,并加之自己的理解。
首先swift全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main方法
。你同样不需要在每个语句结尾写上分号。而且提供了playground可以在编辑代码实时看到效果,可以在xcode中new一个playground然后体验一下。如图。
以下代码的运行都可以通过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"
- var occupations = [
- "Malcolm": "Captain",
- "Kaylee": "Mechanic",
- ]
- occupations["Jayne"] = "Public Relations"
- let emptyArray = [String]()
- let emptyDictionary = Dictionary<String, Float>()
- shoppingList = []
2.控制流(Control Flow)
使用if else
和switch case
来进行条件操作,使用for-in
、for
、while
和do-while
来进行循环。
1.包裹条件和循环变量的小括号可以省略,语句体的大括号是必须的。
2.在if
语句中,条件必须是一个Bool表达式,不会隐形地与0做对比,if score { ... }不会通过编译。
3.在变量的类型后面加一个?来标记这个变量的值是可选的,可选值是一个具体的值或者是nil(
表示值缺失)。
- var optionalName: String? = "John Appleseed"
- var greeting = "Hello!"
- if let name = optionalName {
- 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 {
- loop += i
- }
- for i in 0...3{
- 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()
- sumOf(42, 597, 12)
2.方法可以嵌套。被嵌套的方法可以访问外部方法的变量,你可以使用嵌套方法来重构一个太长或者太复杂的方法。
- func returnFifteen() -> Int {
- var y = 10
- func add() {
- y += 5
- }
- add()
- return y
- }
- returnFifteen()
3.方法可以作为另一个方法的参数和返回值。
- func makeIncrementer() -> (Int -> Int) {
- func addOne(number: Int) -> Int {
- return 1 + number
- }
- return addOne
- }
- var increment = makeIncrementer()
- increment(7)
- 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)
4.方法实际上是一种特殊的闭包,你可以使用{}
来创建一个匿名闭包。使用in
来分割闭包的描述以及代码段。
- numbers.map({
- (number: Int) -> Int in
- let result = 33 * number
- return result
- })
原文地址:http://blog.csdn.net/ooppookid/article/details/40321473