Swift入门 一
2015-11-05
Swift代码
开发技巧:
- 自动类型推导: option + click 查看变量/方法的说明
- 能不写类型就不写类型,减少冗余代码
- 苹果推荐我们先定义常量,只有需要修改的时候才定义变量
数据类型:
- 类型安全的语言,在任何情况下都不会进行自动类型转换(隐式类型转换),所有的转换都必须是显示的
- 只有相同类型的值才能进行赋值
- 哪怕是CGFloat和Double之间也必须进行转换
1 2 3 4 5 6 7 | // 常量 let let number: Int number = 10 let a = 10 //自动类型推导 option + click 查看变量/方法的说明 // 变量 var var value: Double value = 20 |
元祖
- 可以将多个值保存在一起
- 元祖可以保存不同数据类型的值
- 元祖和数组一样,可以通过索引访问元祖中保存的值,除此之外,还可以给每一个值起一个名字,将来通过这个名字来访问对应的值,还能在定义的同时取出元祖中的值
1 2 3 4 5 | let number = (10, 11, 12) //通过索引访问 number.0 // 10 number.1 // 11 number.2 // 12 |
1 2 3 4 5 | let person = (name: "gm" , age: 30,score: 100) // 通过名称访问 person.name person.age person.score |
1 2 3 4 5 | let values: (String, Int, Double) = ( "gm" ,30,99.9) let (name, age, score) = ( "gm" ,30,99.9) name age score |
if
- 必须是bool值,取值true/false
- 条件表达式中的()可以省略
- {}不允许省略,哪怕只有一条语句
1 2 3 4 | if num == 10 { print( "值为10" ) } |
三目运算符
- 用法和OC中一模一样,除了条件表达式只能是bool类型之外
- 开发中三目运算符用的非常多
1 2 | let value = 10 let res = value == 20 ? 20 : 0 |
switch
- 用法大致和OC中一样
- 条件表达式()可以省略
- break可以省略,不会穿透
- OC 中如果想在case中定义变量,必须加上{},否则作用域混乱,而Swift不用
- OC中default的位置可以随便乱写,会先判断完所有的case才会执行default,swift中不能随便乱写,只能写在最后
- OC中default是可以省略的,swift default大部分是不可以省略的
1 2 3 4 5 6 7 8 9 10 | let number = 0 switch number { case 0: print( "0" ) case 5: print( "5" ) case 10: print( "10" )<br> default :<br> print( "default" )<br> } |
可选类型
- 在OC中可以给一个对象类型变量赋值为nil或者一个对象,而在Swift中如果想给一个变量赋值为nil那么必须明确指定为可选类型才可以,也就是说普通类型是不能赋值为nil
- 如果以后但凡看到init后面跟上一个?,酒店代表初始化方法返回的值是可选的
- 可选类型不能直接使用,如果要使用可选类型的值,就必须对可选类型进行解包
- 解包: 告诉系统可选类型的变量,一定有值,乳沟可选类型的值没有值,我们又进行强制解包,那么会报错
- 解包的方式: 加!
1 2 3 4 5 6 7 8 9 10 | let str = "http://aunty.com/" let url = NSURL (string: str) print(url!) //解包 let num1: Int? = 10 let num2: Int =20 let sum = num1! + num2 //不推荐我们随便使用强制解包<br> if let temp = num1 //可选绑定 { let sum = temp + num2 } |
可选绑定
- 专门用于解决强制解包的弊端
- 开发中如果想使用一个可选类型的值,也不一定一定选用可选绑定,因为如果可选类型的值较多,而又属于同一个逻辑,那么一不小心就会形成if嵌套
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | let url2 = NSURL (string: str) print(url2) if let temp = url2 { print(abc) } let v1: Int? = 10 let va: Int? = 20 if let m =v1 { if let n = v2 { let sum = n1 + n2 } } |
guard
- 类似于可选绑定,swift2.0推出
- 只有条件为假才会执行else后面大括号中的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | func test() { guard let m = v1 else { print( "没有值" ) return } guard let n = v2 else { print( "没有值" ) return } let _ = m + n } test() |
for循环
- 基本用法和OC一样
- 条件表达式必须是bool类型的值
- 条件表达式中的() 可以省略
- {} 不可以省略
1 2 3 4 | for var i = 0; i < 10; i++ { print(i) } |
区间
- 半闭区间: 0..<10 包含头不包含尾
- 闭区间: 0...10 包含头也包含尾
1 2 3 4 | for i in 0..<10 { print(i) } |
while 循环
- 基本用法和OC一致
- 条件表达式必须是bool类型的值
- 条件表达式的()可以省略
- 在OC中如果{}中只有一条语句,那么{}可以省略,而Swift不可以
1 2 3 4 5 | var value = 0 repeat{ print(value) value++ } while value <10 |
数组
- 格式 var arr:[Int] = [数值1, 数值2, 数值3]
- 不可变数组 let == NSArray
- 可变数组 var
- 不可以给不可变数组追加内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | let arr = [10, 20, 30] //开发中用这种 let arr2: [Int] = [10, 11, 12] let arr3: Array<Int> = [10, 11, 12] var arr4: [Int] // 先定义后使用的时候加数据类型 arr4 = [10, 11, 12] arr4[0] // 查找 arr4[0] = 55 // 修改 arr4.append(998) // 追加 arr4.removeAtIndex(0) // 移除 arr4.removeAll() // 全部移除 arr.capacity //开辟存储空间的规则: 2 的倍数 var arr5 = [Int]() //如何创建空数组 |
字典
- {} 替换为[]
- 去掉所有的@
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | let dict = [ "name" : "gm" , "age" : 30] let dict2: [String : NSObject ] = [ "name" : "gm" , "age" : 30] let divt3: Dictionary<String, AnyObject> = [ "name" : "gm" , "age" : 30] let dict4 = [String: AnyObject]() // 在企业开发中,使用频率最高的字典类型就是[String: AnyObject] var dict = [ "name" : "gm" , "age" : 30] //可变 dict[ "name" ] // 取值 dict[ "name" ] = "mm" // 更新 dict[ "score" ] = 99.9 // 新增 score之前是不存在的 dict.removeValueForKey( "name" ) //移除 for key in dict.keys // 遍历 { print(dict[key]) } //将dict中的key 赋值给k, value 赋值给v for (k, v) in dict { print(k) print(v) } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步