Swift4 基础
创建: 2018/02/17
完成: 2018/02/19
更新: 2018/02/25 补充参照型只有类的实例和闭包
更新: 2018/03/03 加红加粗for-in注意事项, 常量不用也不能声明
【任务表】: TODO
数据类型与变量 | |||||||||||||||||||||
Swift的数据类型 |
所有类的实体都是实例,都是运算对象,放到数组和哈希表里都一视同仁。 没有指针与数据本体的区别,但是被多个同时参照的时候需要区分。 值型与参照型 ● 参照型只有类的实例和闭包 值型里的参照型可以看做指针
|
||||||||||||||||||||
基本数据类型 |
|
||||||||||||||||||||
数值字符 |
|
||||||||||||||||||||
变量与常量 | 能用常量的不用变量 | ||||||||||||||||||||
变量的定义 |
var 变量名 (: 型) (= 式) // 带括号的可省略 //例 var age : Int = 18 var a : Int = 1, b : Int = 2// 多个用 , 连接
(推荐)可以省略型,自动判断 |
||||||||||||||||||||
常量的定义 |
let 变量名 (: 型) (= 式) // 例 let times : Int = 1
|
||||||||||||||||||||
类型转换 |
Swift不会自动进行类型转换 转换方法 // 写法 类型(变量) // 例 var intA : Int = 1 Double(intA) Float(intA)
整数之间的比较不受类型限制 其他都不能跨类型比较(整数和实数不能比,Double和Float不能比) |
||||||||||||||||||||
字符串 |
""包裹, +连接, +=连接到自己后面 \t tab \n 换行 \" " \\ \ \u{} 8位以内的16进制数 \() 插值 |
||||||||||||||||||||
print函数 |
print(..., separator: s=" ", terminator: s="\n") 指定多个参数时用separator的字符串来分割,默认空格 terminator可以指定结尾,默认换行 |
||||||||||||||||||||
数组 |
内部没有容量限制,随意存入取出 一个数组内部存入的实例类型必须相同 值型
var a = [1, 2, 3, 4, 5] // 默认的类型判断 var a : [Int] = [1, 2, 3, 4, 5] // 指明类型 var s = [Int]() // 使用初始化函数 也可以以式的结果作为元素
var a = [ 1+1, 1+2, 1+3, 1+4 ] // [2, 3, 4, 5]
|
||||||||||||||||||||
获取数组内部元素 |
array[n] 0开始,array.count-1为末尾 插入元素 array.append(v) // v是具体值 array += v |
||||||||||||||||||||
运算符 |
● 没有指针,* & ->的意思不一样 ● . , []不是运算符 ● 不存在++, -- ● 等式不返回值, 不能使用连等(a = b = c), 条件式里出现等式会报错 |
||||||||||||||||||||
运算符的注意 |
● 两边都有或者都没有空白的被视为两项运算符 a + b, a+b ● 单边没有空格的被视为前置/后置运算符 +a // 前置 a+ //后置 |
||||||||||||||||||||
命名法则 |
大驼峰记法: 型名, 类名 Int, Bool, SampleClass 小驼峰记法: 方法名, 变量名 firstVal, boderWidth, getLength 如果要用固有词做变量,加单引号(使用该变量处也要加单引号)
var `if` = 1 print("if = \(`if`)")
|
||||||||||||||||||||
型参数 |
泛型(Generics) # TODO: Supply [泛型 s13]
var a : [Int]
var a : Array<Int>
|
||||||||||||||||||||
import模块 |
包含基本数据结构(基本类型), 运算, 函数等的是标准库 import导入库和框架, .swiftdoc, .swiftmodule 例: import Cocoa import UIKit import Foundation import Darwin // Foundation内部系统相关部分
|
||||||||||||||||||||
命名空间 |
模块名.名字 (方法或者变量名) 可以嵌套, 模块名.类名.嵌套类名.名字 Swift也是命名空间,和其他的区分前面加Swift. 如Swift.print
|
||||||||||||||||||||
注释 |
单行注释: // 多行注释: /* ... */ 可以嵌套,内部全作为注释 |
||||||||||||||||||||
控制类语句 | |||||||||||||||||||||
文 |
文末不需要; 长的式子可以换行 多行可以用;分隔写在一行 代入不可以用,分隔写在一行(用;)
|
||||||||||||||||||||
if |
if 条件 { // 不要括号 ... } else if 条件 { ... } else { ... } 例 if num > 0 { print("num: \(num) > 0") } else if num == 0 { print("num: \(num) == 0") } else { print("num: \(num) < 0") }
|
||||||||||||||||||||
while |
while 条件 { ... }
|
||||||||||||||||||||
repeat-while C的(do-while) |
repeat { ... } while 条件
|
||||||||||||||||||||
for-in |
for 常量名 in 式 (where 式子) { // where可省略 ... } ● 常量自动声明,不用自己去声明,也不能在常量处声明 ● 只在循环内部有效
|
||||||||||||||||||||
范围运算符 |
|
||||||||||||||||||||
switch |
switch 式 { case 标签1: //可以不要break,也可以写上 ... case 标签2: ... default: //可省略 ... } ● 必须包含所有情况 ● 条件可以使数值,字符串,其他类型 ● 如果想要执行完case下沿继续运行,用fallthrough ● 实数有误差,避免使用 ● 重叠式上方的优先
|
||||||||||||||||||||
带标签的循环 |
标签1: while 条件 { // 例 标签2: for i in sampleData { ... break 标签1 ... } ... continue 标签2 ... } ● 在for/while/repeat-while前加上标签 ● continue/break 指定标签,不指定为当前的循环_
|
||||||||||||||||||||
带标签的if , switch |
标签1 : if 条件 { 标签2: if 条件 { ... break 标签1 } else { ... } } ● 只能用break, 不能用continue(用了跳出当前循环, 没有循环会报错) |
||||||||||||||||||||
独立代码块 |
do { ... } ● 可以带标签, 跳出只能用break ● 就是例外处理的do-catch的do |
||||||||||||||||||||
简单的运行方法 | |||||||||||||||||||||
playground | File>New>Playground | ||||||||||||||||||||
命令行 | 略 # TODO: Supply [命令行下的swift运行 p36] | ||||||||||||||||||||