下面为一些swift 2.0 的基本语法,写在playground中,每次swift版本跟新的时候,打开瞅瞅,就可以对比出哪里发生了修改。
内容包括:01变量&常量 02分支 03循环 04字符串 05数组 06字典 07函数
01变量&常量
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" /*: let 常量 var 变量 * 自动`推导`,能够根据右边的代码,推导出变量的准确类型 */ let x = 100 // 常量一旦设置数值,就不能再次修改 //x = 300 var y = 200 y = 300 print(x + y) /*: swift 对数据类型要求异常严格 * 整数的默认类型是 Int(long 64位) * 小数的默认类型是 Double (OC 中使用比较多的是 CGFloat) * swift 中任何时候,都不会做 `隐式转换`,如果要对不同类型的数据进行计算,必须要自己转换 */ let i = 10 let j = 8.5 //let k = i + j let iNum = i + Int(j) let dNum = Double(i) + j let size = CGSizeMake(100, 100) let w = CGFloat(j) + size.width
02分支
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" let i = 50 /*: 1. 条件不需要括号 2. {} 不能省略 */ if i > 20 { print("OK") } /*: * OC 和 C 中非零即真 * swift 中逻辑值只有两个 true / false */ if i == 50 { print("OK") } // 三目,语法和 OC 基本一样 let b = i < 20 ? 10 : 80 /** 可选项(Optional) ? 表示变量可以有值,也可以没有值 * convenience init? 构造函数,? 表示不一定能够实例化出对象 * `!` 表示程序员告诉编译器对象一定有值,编译能够通过 * 如果运行时,没有值,就`崩溃` */ let url = NSURL(string: "http://www.baidu.com") //如果不确定url 真的有值,增加一个 if if url != nil { let request = NSURLRequest(URL: url!) } print(url) // 判断对象是否有值 - 增加了 if ,能够保证进入 {} 代码,url1 一定有值的 if let url1 = NSURL(string: "http://www.baidu.com/s?wd=zhang") { let request = NSURLRequest(URL: url1) }
03循环
//: Playground - noun: a place where people can play import UIKit for var i = 0; i < 10; i++ { print(i) } /*: swift * 0~9 其中 0..<10 不能有空格 */ for i in 0..<10 { print(i) } // 0~10 for i in 0...10 { print(i) } // 不关心下标,可以使用 _ 省略 for _ in 0..<10 { print("hello world") }
04字符串
//: Playground - noun: a place where people can play import UIKit /*: Swift 中使用 String 是一个结构体,效率会高,支持遍历 OC 的 NSString,是一个对象 * Swift 中,String 和 NSString 之间的转换很容易 */ var str = "我要飞的更高" // swift 2.0 中遍历字符 for c in str.characters { print(c) } // 字符串拼接 let i = 1 let rect = CGRectMake(0, 0, 100, 100) str = str + "(i)" + "(rect)" // 拼接字符串的时候,一定记住如果是可选项,要特别注意,带上 Optional var x: Int? x = 10 let str1 = "(x!)" // 格式 let frmString = String(format: "%02d:%02d:%02d", arguments: [11, 1, 59]) /*: 如果使用 Range 的时候,最好用 NSString */ // 跟原来的字符串一模一样 var subStr = str.substringWithRange(Range<String.Index>(start: str.startIndex, end: str.endIndex)) print(subStr) // 从哪里开始,到哪里结束 subStr = str.substringWithRange(Range<String.Index>(start: advance(str.startIndex, 3), end: advance(str.startIndex, 6))) print(subStr) let myStr: NSString = str let myStr1 = str as NSString myStr.substringWithRange(NSMakeRange(0, 3))
05数组
import UIKit var str = "Hello, playground" /*: 数组定义 [] */ let array = ["zhangsan", "lisi"] // 遍历 for str in array { print(str) } print(array[0]) print(array[1]) // 不能向不可变数组添加内容 //array.append("wangwu") /*: 可变 var 和 不可变 let * OC 中的数组,可以存放任意类型的对象 */ // array1 的类型 [String],自动推导,只允许存放字符串 var array1 = ["xiaohua", "xiaocao"]; // array2 的类型 [NSObject],可以存放`任意对象` // 在 swift 中,数字也可以直接当成对象存放在数组,不需要`转换` var array2 = ["xiaohua", "xiaocao", 123]; array1.append("laozhang") array2.append(100) /*: 数组的定义 */ // array3 是一个仅允许存放字符串的数组,定义类型 var array3: [String] // 对 array3 进行实例化,在此之前,不允许操作 array3 = [String]() array3.append("laowang") // 数组的合并 array3 += array1 // 必须是相同类型的才能够合并 // 提示:在 swift 开发中,通常数组中保存的对象类型,都是一样的! //array3 += array2 // 数组的删除 array3.removeAtIndex(2) array3 array3 += array1 print(array3.count) // 清空数组 keepCapacity 是否保持容量 array3.removeAll(keepCapacity: false) // 添加内容 // 如果向数组中追加元素,超过了容量,会直接在现有容量基础上 * 2 // OC 实例化可变数组,最好指定容量 for i in 0..<16 { array3.append("hello - (i)") print(array3[i]) print(array3.capacity) }
06字典
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" /*: 定义字典 [] let 不可变 var 可变 */ // [String : NSObject] - 类型最常见 // JSON 的数据格式,key 是 String // [key: value] var dict = ["name": "张三", "age": 18] dict // 如果 key 不存在,会新建 dict["title"] = "boss" dict // 如果 key 存在,会覆盖 dict["name"] = "lisi" dict /*: 字典的遍历 k, v 可以随便写,前面是 key,后面是 value */ for (vv, kk) in dict { print(vv + "--- (kk)") } /*: 合并字典 */ // 1. 定义字典 var dict1: [String: NSObject] dict1 = [String: NSObject]() dict1["nickname"] = "老王" dict1["age"] = 80 // 2. 合并-如果存在会覆盖,如果没有会新建 for (k, v) in dict1 { dict[k] = v } dict
07函数
import UIKit var str = "Hello, playground" //参数及返回值,取消了1.2中的# func sum(num1 a: Int, num2 b: Int) -> Int{ return a+b } sum(num1: 10, num2: 20) func prinnnnt(printtt a: Int) -> Void { print(a) } prinnnnt(printtt: 10)