看的他的视频: 小波说雨燕
虽说我是不相信3天学会Swift的,但是学习基本的知识还是可以的。
只是看着视频,自己实践敲代码
第一天 面向过程编程
//: Playground - noun: a place where people can play
import UIKit
//Hello World
print("Hello World! 世界你好")
print("??")
//常量 使用let关键字 多使用常量 若不知道是常量还是变量 用常量
let 女朋友数量 = 1
let 工资 = 5000
//定义了一个圆周率
let π = 3.14
//变量 使用var关键字
var 课程名 = "Swift 3.0"
课程名 = "4.0"
//Int 和类型判断
var 今天跑了多少 = 5
今天跑了多少 = 6
//布尔 只有true 和 false
var da = true
//元组(Tuple): 定义变量的一个组合
//形式(一般): (3, "天", "Swift", "3.0")
//形式(前缀): (day: 3, unit: "天", lang: "Swift", ver: "3.0")
var x = 1
var y = 2
var z = 3
var 向量 = (x, y, z)
x
y
z
//可通过下标获取元素
向量.0
//也可通过变量名获取元素
var 课程 = (day: 3, unit: "天", lang: "Swift", ver: "3.0")
课程.day
//可选类型(Optional): 代表变量可能有值的情况
//形式: var 变量 : 类型? 默认是无值nil
var address : String?
address = "南京"
var addr : String? = "南京栖霞区"
//基础操作符 操作几个对象就是几元操作符
//一元操作符
-6
//二元操作符
3 + 6
"字符串"
//空
var a = ""
//空格 不为空
var b = " "
a.isEmpty
b.isEmpty
if a.isEmpty {
print("为空")
}else {
print("不为空")
}
//字符
var aa : Character = "我"
//可以对一个字符串的character属性进行循环,来访问其中单个字符
let words = "好好学习 天天向上"
for word in words.characters {
print(word)
}
//连接字符串和字符
//用+
let str1 = "学习"
let str2 = "Swift"
let str3 = "加油"
var string = str1 + str2 + str3
//向字符串添加字符 用append方法
let number : Character = "1"
string.append(number)
//字符串插值: 组合常量/变量/字面量/表达式成一个长字符串
let name = "冰c"
let type = "G"
let num = 2
let price = 120
let 订票提示 = "\(name)先生,您订购了\(type)\(num)的往返票,需支付\(price * 2)元"
//集合类型: 一组同一类型的值的组合,根据组合的整体特性分为:
//有序可重复--数组(Array)
//无序不重复--集合(Set)
//无序可重复,但每一个值有唯一的键(key)--字典(Dictionary)
let array : [Int]
//创建一个有默认值得数组
array = [Int](repeatElement(3, count: 10))
//创建一个有序范围的Int数组
let array2 = Array(1...10)
//用数组字面量来创建数组: [值1, 值2, 值3...,值N]
var places = ["beijing", "shanghai", "nanjing", "hangzhou"]
//元素计数: count 是否为空: isEmpty
places.count
places.isEmpty
//添加 append 一个同类型的元素
places.append("shenzhen")
let otherPlaces = ["NewYork", "Paris", "London"]
//添加数组 同类型数组
places += otherPlaces
places.count
//获取元素
places[5]
//插入 insert
places.insert("Toronto", at: 4)
//删除 remove
places.remove(at: 3)
//集合: 值无序不重复,适合存储具有唯一性的数据,如身份证号码
//定义: Set<元素类型> 无法使用类型推断 但可省略类型
let set : Set = [1, 2, 3, 4]//无序
//用数组字面量创建集合
var cities : Set = ["beijing", "shanghai", "nanjing"]
//元素计数 : count, 是否为空: isEmpty
cities.count
cities.isEmpty
//插入insert
cities.insert("shenzhen")
//删除 remove
cities.remove("shanghai")
//是否包含某元素
cities.contains("beijing")
cities.contains("guangzhou")
//转换为数组
let citiesArray = cities.sorted()
//集合间的运算
//交集
var set1 : Set = [2, 3, 5, 6]
let set2 : Set = [2, 5, 8, 26]
set1.intersection(set2)
//差集
set1.subtract(set2)
//并集
set1.union(set2)
//补集
set1.symmetricDifference(set2)
//集合间的关系
//相等
let set3 : Set = [1, 2, 3]
let set4 : Set = [3, 2, 1, 5]
set3 == set4
//子集
//isSubset(可以相等), 严格子集: isStrictSubset
set3.isSubset(of: set4)
set3.isStrictSubset(of: set4)
//父集: isSuperset (可以相等) 严格父集: isStrictSuperSetOf
set4.isSuperset(of: set3)
set4.isStrictSuperset(of: set3)
//无交集 isDisjoint
let set5 : Set = ["游戏", "动漫"]
let set6 : Set = ["台球", "购物"]
set5.isDisjoint(with: set6)
//字典 值无序可重复 键值对
//定义: Dictionary<键类型, 值类型> 或 [键类型 : 值类型]
//用字典字面量来创建字典 键与值之间用冒号隔开
var dic1 = ["name" : "cai", "sex" : "man", "addr" : "nanjing"]
//计数 count 是否为空: isEmpty
dic1.count
dic1.isEmpty
//添加或更新 字典变量[key] = 值
dic1["addr"] = "南京"
dic1["height"] = "175"
dic1
//获取 依然可以用下标
dic1["name"]
//移除, 用下标把值设为nil
dic1["addr"] = nil
dic1
//循环一个字典for in, 因为键值对有两个元素 可以用元组
for (key, value) in dic1 {
print(key, value)
}
//单独使用其中键或值,使用keys或values(可使用for in)
for key in dic1.keys {
print(key)
}
for value in dic1.values {
print(value)
}
//把键值对分离成数组,[数组类型](字典变量.keys) [数组类型](字典变量.values)
let codes = [String](dic1.keys)
let values = [String](dic1.values)
复制代码
控制流
- 用来检查和运算各种条件和逻辑的组合,控制app的运行流向
- 循环语句for-in, while
- if和循环控制语句
- 早退语句
- 退出循环语句break continue
- break: 结束整个循环 continue: 结束本次循环
- switch
函数
//定义函数:
//形式: func 函数名(参数1: 类型, 参数2: 类型,...) -> 返回结果的类型 {执行语句}
//调用: var 变量名称 = 函数名(变量1, 变量2...)
//类型要严格匹配
//加法函数
func add(x: Int, y: Int) -> Int {
return x + y
}
var z = add(x: 3, y: 5)
print(1 + 2)
//参数和返回值
//无参数 无返回值 一般用于执行一系列操作,不需要结果
func welcome() {
print("欢迎")
print("学习")
print("Swift")
}
welcome()
//多返回值 使用元组
func maxMin() -> (Int, Int) {
return (Int.min, Int.max)
}
maxMin().0
maxMin().1
//多个参数 参数以 名称 : 类型 列出,多个参数间用逗号分隔
func add_func(x: Int, y: Int, z: Int) -> Int {
return x + y + z
}
//可以给某个参数以默认值
func add_func2(x: Int, increment: Int = 2) -> Int {
return x + increment
}
add_func2(x: 3)
add_func2(x: 3, increment: 7)
//函数类型: 包含参数和返回类型的简写形式 可以像普通变量那样使用,一般用于函数式编程
//calcate()具体怎么卖算 要依赖method方法
func calcate(x: Int, y: Int, method:(Int, Int) -> Int) -> Int {
return method(x, y)
}
func add_c(x: Int, y: Int) -> Int {
return x + y
}
func mutiply(x: Int, y: Int) -> Int {
return x * y
}
calcate(x: 3, y: 6, method: add_c)
calcate(x: 5, y: 6, method: mutiply)
复制代码
闭包
//闭包 Closure 是一种函数的简写形式,省去函数名,把参数和返回值放入花括号内
//无名函数
//闭包表达式
//1.有时候需要更简洁的使用函数的方式
//2.尤其是一个函数的某参数是另一个函数时
//3.这节主要以sort函数为例
var city = ["beijing", "shanghai", "guangzhou", "shenzhen"]
//sort函数用于对数组进行排序 只接受一个函数型参数,描述排序逻辑
var sortedCity = city.sorted()
func daoxu(a: String, b: String) -> Bool {
return a > b
}
var s = city.sorted(by: daoxu)
//用闭包表达式来改写
var citySort = city.sorted { (a, b) -> Bool in
return a > b
}
//闭包的自动推断
//参数和返回类型可自动推断,单表达式可以忽略return关键词
var citySorted_ = city.sorted { (a, b) in
a > b
}
//可使用快捷参数 前缀$,从0开始递增
var city_ = city.sorted{$0 > $1}
city_
复制代码
枚举
//枚举 enumeration
//计数、列举(有限): 详细叙述之意
//非常强大、与switch结合使用
//定义和使用
//给定一个名称,然后把每一种情况列举出来
enum Weather {
case sunny
case cloudy
case rainy
case snow
case foggy
}
//使用 点语法
Weather.cloudy
//与switch配合使用,如果变量是枚举值,可省略枚举名
var todayWeather = Weather.sunny
switch todayWeather {
case .sunny:
print("天气晴朗")
case .cloudy:
print("多云")
default:
print("天气状况未知")
}
//附加值: 每一种类型都可附加一个或多个值,形式是元组
enum 精确天气 {
case 晴(Int, Int, String)
case 霾(String, Int)
}
//赋予附加值: 加上元组字面量
let 上海今日天气 = 精确天气.晴(26, 50, "蓝")
let 北京今日天气 = 精确天气.霾("PM10", 100)
//取得附加值: 用switch语句 在case中加上元组变量
switch 北京今日天气 {
case .晴(let i, let j, let m):
print("紫外线指数:", i ,"晾晒指数:", j, "天蓝程度:", m)
case .霾(let i, let j):
print("雾霾颗粒类别:", i, "指数:", j)
}
复制代码
三天代码在github