验证中...
开源中国 2018 年度最后一场技术盛会邀你来约~错过就要等明年啦!点此立即预约
语言: Swift
分类: 编程语言基础
最后更新于 2018-07-17 14:29
gistfile1.txt
原始数据 复制代码
1.定义常量: let; 定义变量: var
2.var n: Int = 3; xcode有类型推断, : Int可以不写,swift中分号(;)可以不写 例如: 上面表达式可以写成 var n = 3
3.swift中默认的浮点型是Double(双精度),双精度用8个字节存储
4.元组Tuple: 定义变量的一个组合,下面三种方式都可以
- var n = (1, "明天", "2.54", "π", "...") 要取出元组中的值,用索引即可,如 n.0 注意: 这里没有括号,不是n.(0)
- var (x, y, z) = (1, "你好", "π")
- var n = (x: 1, y: "你好", z: "π")
5.可选类型Optional: 代表变量中可能有值的情况
- var n: String? 默认值是nil,这里问号(?)不能少,少了就变成定义一个String类型,而不是定义一个可选类型了
6.操作符
- 一元操作符: 负号,如 -6
- 二元操作符: 一次操作两个对象,如加减乘除 + - * / 3 + 4
- 赋值操作符: =
- 数学操作符: + - * / %
- 组合赋值: += -= *= /=
- 比较操作符: > < >= <= ==
- 逻辑操作符: && || !
7.字符型: Character 字符串型: StringString
var n1: Character = "a" var n2: String = "aaaaa"
8.访问字符串中的每一个字符
可以使用for inin 循环:
for x in n2 {
print(x)
}
9.连字符 + 只能将String互相连接,String和Character之间不能连接,想要连接用append
10.字符串添加字符: append
var str1 = "abc"
var str2 = "d"
str1.append("d") 或者 str1.append(str2)
11.字符串中的插入操作: \()
var n = 20
print("您一共消费了\(n)元")
12.数据容器
- Tuple 元组 var n1 = (1, "你好", π)
- Array 数组 var n2 = [1, 2, 3]
- Set 集合 var n3: Set = [1, 2, 3]
- Dictionary 字典 var n3: Dictionary = ["a": 1, "b": 2, "c": 3]
有序有index: Array, Tuple 无序无index: Set, Dictionary 字典(Dictionary)虽然没有indexindex,但是它有key和valuevalue,它是以键值对来存储数据
存储类型相同: Array, Set 存储类型可以不同: Tuple Dictionary
创建空容器: 因为创建空容器,编辑器就不能推断类型,所以必须指定数据类型是Sting/Int...等等
创建空数组或者空集合,用 var n: Array<Int> = [] / var n: Set<Int> = []
也可以用Array方法或者Set方法 var n = Array<Int>() / var n = Set<Int>()
13.Array的操作
var str1 = ["北京", "上海", "广州"]
- 计数: count
str1.count
- 判断是否为空: isEmpty
str1.isEmpty
- 插入: insert
str1.insert("南京", at: index)
- 连接: +=
var str2 = ["武汉", "长沙"]
str1 += sts2
- 删除: remove
str1.remove(at: index)
删除所有: str1.removeAll() 返回空数组[], set删除所有返回空集合 Set([])
- 获取元素: 数组名[index], 元组获取元素的方式: 元组名.index
14.Set的操作
var set1: Set = ["北京", "上海", "广州"]
- 计数: count
set1.count
- 判断是否为空: isEmpty
set1.isEmpty
- 删除所有: removeAll()
set1.removeAll() 因为Set无序,所以没有index,数组里面跟index相关的操作,在Set里面都做不了
- 包含: contains()
set1.contains("5") 判断set1中是否包含 "5"
- 转化成数组: sorted()
set1.sorted()
set不能 +=
15.字符串 Tuple Array Set 用法举例
var str1 = "abc"
var str2 = "def"
str1.count
str1.isEmpty
str1 += str2
--------------------------------------------------------
var tuple1 = (1, "你好")
var tuple2 = (2, 3, "π")
tuple1.0
--------------------------------------------------------
var array1 = ["1","2", "你好"]
var array2 = ["1", "2", "你好", "π", "ok"]
var arrayEmpty = Array<Int>()
array1[0]
array1.count
array1.isEmpty
array1 += array2
array1.remove(at: 0)
array1.removeAll()
--------------------------------------------------------
var set1: Set = ["1", "2", "3"]
var set2: Set = ["4", "5", "6"]
var setEmpty = Set<Int>()
set1.count
set1.isEmpty
set1.insert("5"), 这里是直接插入值,不能指定位置
set1.removeAll()
set1.contains("5")
--------------------------------------------------------
16.Set之间的运算, 运算 返回Set类型, 只有set之间才有交,差,并,补运算, Array数组没有
- 交集: intersection
a.intersection(b)
- 差集: subtract
a.subtract(b) 保留a集合中不同于b的部分,差集会修改原集合a
- 并集: union
a.subtract(b) a,b集合的总和
- 补集: symmetricDiffrence
a.symmetricDifferencece(b) 去除交集以外的部分
17.Set之间的关系: 关系 返回布尔类型不是返回集合类型
子集: isSubset (含相等)
set1.isSubset(of: set2) set1 是否是 set2 的子集 前者是否是后者的子集,记住这里用的是of
严格子集: isStricSubset (不含相等)
set1.isStrictSubset(of: set2)
父集: isSuperset (含相等), 用法同上
严格父集: isStricSubset (不含相等), 用法同上
相等: ==
set1 == set2
无交集: isDisJoint
set1.isDisJoint(with: set2)
18.字典: Dictionary 无序可重复,存储的是键值对
创建空字典: var dic1: Dictionary<String,String> = [:]
字典同样有isEmpty 和 count方法
字典添加元素: dic1[key] = 值
将字典中key和value单独取出成一个数组: 不一定用[String],也可用[Int],用Srting还是Int活着其它,根据键值对相应的类型来写
var dicKey = [String](dic1.keys) //这里的keys中的s不能少
var dicValue = [String](dic1.values) //这里的values中的s不能少
19.判断变量的数据类型
var a = type(of: 3)
print(a)
20.控制流: 其实也就是循环
for _ in: 知道循环次数
计算1加到100的值:
var sum = 0
for i in 1...100 {
sum += i
}
print(sum)
--------------
单纯的循环100次:
for _ in 100 {
print("hello")
}
while: 不知道循环次数
var i = 1
var sum = 1
while i < 10 {
sum += 3
}
21.函数
举例:
- 无参无返回函数
func welcome1() -> Void {
print("无参无返回值")
}
welcome1()
- 有参无返回函数
func welcome2(a: Int, b: Int) -> Void {
print("有参无返回值")
}
welcome2(a: 1, b: 2)
- 无参有返回函数
func welcome3() -> String {
return "hello word"
}
welcome3()
- 有参有返回
func welcome4(x: Int, y: Int) -> Int {
return x + y
}
welcome4(x: 1, y: 1)
- 多返回值(使用元组)
func welcome5() -> (Int, Int) {
return (Int.min, Int.max)
}
welcome5().0
welcome5().1
- 带有默认值参数
func welcome6(Int: x, increment: Int = 1) -> Int{
return x + increment
}
welcome6(x: 1) // 输出结果是2,(1 + 1)
welcome6(x: 1, increment: 2) //输出结果是3,(1 + 2)
22.闭包: 是一种函数的简写形式,省去函数名,把参数和返回值放入花括号内
- 有时候需要更简洁的使用函数的方式
- 尤其是一个函数的参数是另一个函数的时候
- 下面以sort函数为例,sort函数用于对数组进行排序,只接受一个函数型参数,描述排序逻辑
var city = [2, 3, 1, 4]
var cityRank1 = city.sorted() -- print(cityRank1)默认会排序成[1, 2, 3, 4]
如果我们定义一个倒序函数
func daoxu(a: Int, b: Int) -> Bool {
return a > b
} // 意思就是两两比较两个值,将大的值放在前面,从而实现由大到小排序
var cityRank2 = city.sorted(by: daoxu) //我们将这个倒序函数再传给sorted,让sorted按照这个倒序函数的方式进行排序
闭包的写法:
var cityRank3 = city.sorted { (a: Int, b: Int) -> Bool in
return a > b
}
闭包进化写法: 闭包自动推断类型,return关键字在只有一行代码情况下可省略
var cityRank4 = city.sorted { (a, b) -> Bool in
a > b
}
闭包再进化写法: 可以使用快捷参数$0, $1, $2...来代替 (a, b) -> Bool in
var cityRank5 = city.sorted {
$0 > $1
}
23.枚举(enumeration): (有限的情况)计数/举例,增强的,更抽象的数字类型,非常强大,与swift结合使用,天生一对
-- 定义一个枚举类型: 枚举名:Weather,自定义,第一个字母最好大写 case后面的sunny是枚举值
enum Weather {
case sunny
case cloudy
case snow
case froggy
case rainny
}
-- 使用枚举: 点语法,主要与switch配合使用
Weather.sunny
如果变量是枚举值,可以省略枚举名
var weather1 = Weather.froggy
switch weather1 {
case .froggy
print("今天有雾")
}
-- 枚举可以有附加值: 附加值使用元组(Int, String, Bool)
enum Weather {
case sunny(Int, Int, String)
case cloudy
}
let wea = Weather.sunny(30, 30, "你好")
24.面向对象编程: 用生物学的角度把变量和函数有机组织起来,叫做面向对象编程
基因: 属性和方法(变量和函数)
繁殖: 完全克隆和基因交换(继承和变异)
术语: 结构体(struct)和类(class),Swift3推荐你自己定义的对象使用结构体
-属性是一个类/结构体/枚举关联的变量
-实例属性: 实例化后才能使用
-存储属性:保存单个类型的变量
class role {
let id = 123
let name = "小明"
var money = 888
}
实例化属性:
let role1 = role()
role1.id
计算属性: 由其他属性计算得出的,由getter和setter组成
getter获取器(必须): 描述属性如何计算,以及返回语句,形式: get {语句和返回}
setter设置器(可选): 有新值(newValue)后如何影响其他属性,形式: set {语句和返回}
属性监视: 对属性值得变化进行响应
willSet: 事前响应. 新值: newValue
didSet: 事后响应
类型属性不需要实例化,用static,然后直接用点调用就可以了
class 生命体 {
class var 遗传方式: String {
return "RNA"
}
}
class 人类 {
override class var 遗传方式: String {
return "DNA"
}
} //此时可以 人类.遗传方式
结构体和枚举,关键字static
struct 逛街 {
static let 试衣间 = "UNICLO"
static let 网站 = "http://www.taobao.com?cate="
var cate = ""
var shareUrl: String {
return 逛街.网站 + cate
}
}
逛街.试衣间
let 逛淘宝 = 逛街(cate: "seafood")
逛淘宝.shareUrl -> http://www.taobao.comcom?cate=seafood

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助

12_float_left_people 12_float_left_close