swift语法100
1.打印语句
print("Hello World")
2.定义常量和变量
定义一个字符串常量与变量 let constantString: String = "Hello" // let 常量名称: 字符串类型 = "字符串" var varibleString: String = "World" // var 变量名称: 字符串类型 = "字符串"
3.常量和变量类型会自动推断,使用声明的时候可以省略类型
let constantInt: Int = 1 // 常见的类型有 Int Double Float String var pi = 3.14 // 编译器会自动推断出pi是Double类型
4.类型必须匹配
5.输出的语句
print(constantInt) // 1 print("π的值是:\(pi)") // 输出:3.1415926.输出字符串时将常量或变量放入\()中
6.类型转换
let three = 3 // 按住option,鼠标移动到变量名上,点击可以查看常量类型 var pointOneFour = 0.14 // 系统自动推断pointOneFour的类型为:Double pi = Double(three) + pointOneFour // 只有类型一直才能操作,转换格式: 类型名(变量或常量) let piInt = Int(pi) // Double转Int,系统自动忽略小数点后面的数,会损失精度
7.元组
元组:多个可以是不同类型原色的集合 let http404Error = (404, "Not Found") // 类型为:(Int, String),元组中的元素类型可以不同 let (code, message) = http404Error // 将元组赋值给一个常量 print("code:\(code), message:\(message)") // code:404, message:Not Found let (_, ErrorMessage) = http404Error // _ 可以起到省略的作用,这个在swift中应用很广泛 print(http404Error.1) // Not Found 通过下标访问元素 let ErrorCode = (requestError:401, 402, 403) // 定义元组的时候可以给单个元素命名
8.可选类型,如果有可能赋值为nil,就必须声明为可选类型
1. 可选类型: 用来表示有值或没值的两种状态 var errorCode: Int? = 404 // 在类型后面添加一个? print(errorCode) // Optional(404) errorCode = nil // 对非可选类型赋值为nil会报错 print(errorCode) // nil
9.使用!必须里面不为nil
3. 使用if语句强制解析,可选类型不能直接使用需要转化 if errorCode != nil { // 确定可选类型包含值后可以在变量名后加!强制解析 print(errorCode!) // 404 }
10.可选绑定,将可选类型赋值给一个临时的变量或者常量
if let code = errorCode { print(code) // 输出:404, 自动解析 }else { // print(code) // ❌,code是局部变量 print(errorCode) // 如果errorCode = nil此处输出nil }
11.隐式解析可选类型:因为一定有值,所以可以免去解析的麻烦
let assumedString: String! = "A" // 格式: 可选类型的?改成! print(assumedString) // A if let TempString = assumedString { // 隐式解析可选类型可以被当做普通可选类型来使用 print(TempString) // A }
12.字符串是否为空
emptyString2.isEmpty // true, 通过isEmpty方法判断是否为空
13.遍历字符串的所有字符
for char in emptyString1.characters { // for循环后面会详述 print(char) // 依次输出emptyString1中所有字符 }
14.获取字符串的长度
emptyString1.characters.count // 9, 获取字符串中字符个数包括空格
15.字符串的链接
var string3 = string1 + string2 // Hello World, 通过"+"将两个字符串相连 string1.append(" !") // Hello World !, 通过append()方法拼接 let messages = "Hello \(string2) !" // Hello World !, 通过将常量或变量放入\()中
16.字符串的截取
let messChar = messages[messages.startIndex] // H,通过第一个字符的索引获取字符 let firstIndex = messages.index(after: messages.startIndex) // 1, 第一个字符的索引 let lastIndex = messages.index(before: messages.endIndex) // 13, 最后一个字符的索引 let index = messages.index(messages.startIndex, offsetBy: 4) // 4, 初始位置偏移4 messages[index] // o, 通过索引获得的字符为o messages[messages.endIndex] // ❌, 注意:索引不能越界
17.数组的创建
var arrTitle = [String]()
18.数组的添加
arrTitle.append("超值出游"); arrTitle.append("精选门票"); arrTitle.append("享游港澳");
19.数组的遍历
for arrItem in twoDouble { // 通过for in 循环遍历 print(arrItem) // 依次打印每个元素 }
for (index, value) in twoDouble.enumerated() { // 使用迭代器获取数组元素以及索引号
print("索引:\(index), 元素:\(value)") // 依次打印索引号及元素 索引号:0, 元素:3.0 ...
}
20.字典的声明
var charDict = ["char1":"A", "char2":"B"] // 系统会作自动类型推断,类型也可以省略
21.字典的添加
chars["char3"] = "C"
21.字典的移除
chars.removeValue(forKey: "char2")
22.字典的更新
chars.updateValue("b", forKey: "char2") // 更新键值对,要是这个键不存在则会添加一个
23.字典的遍历
for (key, value) in charDict { // 遍历字典中的所有key value print("\(key): \(value)") // char2: B 换行 char1: A } for key in charDict.keys { // 遍历字典中的所有key print(key) // char2 换行 char1 } for value in charDict.values { // 遍历字典中的所有value print(value) // B 换行 A }
24.for循环的操作
for num in 1...5 { // 依次把闭区间[1, 5]中的值赋值给num print(num) // 依次输出5个数字 }
25.if/else
num = 3 if num == 3 { // if后判断语句返回为真,执行后面{} print(num) // if语句后面的{}不能省略 }else { // if后判断语句返回为假,执行else后面{} print("num is not equeal to 3") }
26.switch
num = 12 switch num { case 2: print("num等于2") // 每个case分支至少需要包含一条语句 print("num等于2") // case分支末尾不需要写break,不会发生贯穿 case 3, 4, 5: // case语句可以匹配多个值,之间用(,)隔开 print("num == 3 or 4 or 5") case 6..<10: // case语句也支持区间 print("num大于等于6,且小于10") case 10..<19 where num % 3 == 0: // 使用where语句来增加额外判断条件 print("num大于等于10,且小于19,且能被3整除") default: print("上面的情况都不满足") }
27.基本函数: 用来完成特定任务的独立代码片段
func minMax(currentArray array:[Int]) -> (min:Int,max:Int) { var currentMin = array[0]; var currentMax = array[0]; for arrItem in array { if arrItem < currentMin { currentMin = arrItem; } if(arrItem>currentMax) { currentMax = arrItem; } } return (currentMin,currentMax) }
28.不确定参数个数的函数:
// 计算多个数的平均数 func avarageNum(_ num: Double...) -> Double { // 参数后面加...表示有多个参数 var total: Double = 0 for number in num { total += number } return total/Double(num.count) } avarageNum(2, 6, 4, 8, 7) // 5.4, 参数个数不限 avarageNum(5) // 注意: 一个函数只能有一个可变参数
27.网络请求框架
Alamofire.request("http://wimg.mangocity.com/bms/api/app/index/index.json", method: .get, parameters: nil, encoding: JSONEncoding.default) .downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in print("Progress: \(progress.fractionCompleted)") } .validate { request, response, data in debugPrint(response) return .success } .responseJSON { response in debugPrint(response) }