本章将对Swift做一个简单说明,内容取自《The Swift Programming Language》,并加之自己的理解。
首先swift全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main方法
。你同样不需要在每个语句结尾写上分号。而且提供了playground可以在编辑代码实时看到效果,可以在xcode中new一个playground然后体验一下。如图。
以下代码的运行都可以通过playground快捷显示,这个功能对于学习来说还是非常好的。
let
声明常量:你只需要决定一次,但是需要使用很多次。
var
声明变量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 = [] //如果类型信息可以被推断出来,可以直接创建空数组和空字典
使用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 {//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 }
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的博客