简介
1.Swift
- 雨燕,敏捷,快速
- 新一代苹果平台(iOS/macOS/watchOS/tvOS)的
APP
及游戏开发语言。 - 语法与
JavaScript、c#
等语法类似,上手极快。
2.历史和未来
- 2014年6月退出第一个版本,由苹果员工
Chris Lattern
历经4年发明。 -
Swift
已开源,计划在未来几年逐渐替代Objective C
语言,成为iOS
开发的主流语言。 - 长期致力于成为未来20年内运行到每一部只能设备上。
3.Swift
的创新
- 引入
Optional
(可选类型) - 支持传统的"面向对象编程",提升至"面向协议编程";即由"类"到"值",提倡使用结构体取代累(class),"遵守协议"取代"继承"。
1.常量
常量的定义
-
let
常量名 - 常量名可以是任意文字、长度不限。
let 女朋友数量 = 2
变量
var className = "学习Swift 3.0"
className = "现在学习Swift 4.0"
如何正确使用常量与变量
- 总是优先使用常量。
- 交给编译器决定。
2.Int和类型推断
值的类型和类型推断
- 3 这样的整数,在
Swift
中称为Integer
类型的值,简写Int
。 - 形式:
var
变量名:Int = 3.由于Swift
有类型推断,类型可以省略不写。
var run1Num : Int = 3 // 可以省略类型声明
var run2Num = 3
3.类型安全
- 变量一旦定义,其类型不可更改,即:不能给变量一个类型不同的值。
4.Bool
布尔型:Bool
,表示逻辑上的"真"或"假"
- 只有2个值,
true
和false
var vip = false
vip = true
5.Tuple
元组(Tuple):定义变量的一个组合
- 形式(一般):(1,2,3)
- 形式(前缀):(day:3, Unit:"天", lang:"Swift", ver:"4.0")
var (x,y,z) = (1,2,3)
x
y
z
var studyClassName = (day:3, Unit:"天", lang:"Swift", ver:"4.0")
studyClassName.day
studyClassName.Unit
studyClassName.lang
studyClassName.ver
6.Optional
可选类型(Optional):代表变量可能有值的情况。
- 如:用户资料的选填部分,如住址/性别等辅助信息
- 形式:
var
变量 :类型?,默认是无值(nil)
var addr : String? // 等价于 var addr : Optional<String>
addr = "深圳市"
7.基础操作符
8.字符串和字符
String
是字符串类型, Character
是字符类型
- 空字符串:用""字面量
var a = ""
var b = " "
- 判断字符串是否为空
a.isEmpty // true
b.isEmpty // false
字符
- 用
Character
类型来定义字符串
var me = "我你" // 默认是字符串
var you : Character = "h"
- 可以对一个字符串的
characters
属性进行循环,来访问其中单个字符。
let words = "攻城掠地"
for word in words {
print(word)
}
连接字符串和字符
- 用 +
let a = "洪荒"
let b = "少女"
let c = "傅园慧"
var famous = a + b + c
- 向字符串添加字符,用
append
方法
let number : Character = "牛"
famous.append(number)
- 字符串插值:组合常量/变量/字面量/表达式成一个长字符串
let name = "swift"
let type = "G"
let numbers = 11
let price = 158.5
let 订票提示 = "\(name)先生,您订购了\(type)\(numbers)的往返票,需支付\(price * 2)元"
控制流
1.for in
for-in
循环 执行固定次数的操作,或操作一个序列(如数组)中的每一项。
- 序列中的每项都参与.
for
与in
之间加一个代替每项的名。
let places = ["beijing","shanghai","guangzhou"]
for place in places {
print(places)
}
var sum = 0
for i in 1...100 {
sum += i
}
sum
- 只需循环固定次数,可以省略项名。比如打印5次相同的文本。
for _ in 1...5 {
print("学习swift")
}
集合类型
- 一组同类型的值的组合,根据组合的整体特性分为:
- 有序可重复 - 数组(Array)
- 无序不重复 - Set
- 无序可重复,但每个值有唯一的键(Key)-字典(Dictionary)
- 批量处理集合中的元素,可以使用for in循环
数组(Array)
- 创建一个有默认值的数组
arrar = [Int](repeatElement(3, count: 10))
- 创建一个有序范围的
Int
数组,Array
(起始值...终止值)
let array2 = Array(1...5)
- 用数组字面量来创建数组:[值1,值2,值3,...值N]
let array3 = ["beijing","shanghai","guangzhou","shenzhen","nanchang"]
- 元素计数:
count
,空否:isEmpty
array3.count
array3.isEmpty
- +添加:
append
,添加一个同类型数组 +=
array3.append("wuhan")
let haiwaiPlace = ["NewYork","London"]
array3 += haiwaiPlace
- 插入:
insert
移除:remove
array3.insert("Paris", at: 2)
array3.remove(at: 6)
集合(Set)
值无序不重复。适合存储具有唯一性的数据,如用户/身份证号码/护照号等
- 用数组字面量创建集合,无法使用类型推断,但可省略类型。
let cardno : Set = [1,2,3,1,4] // 输出 {2, 3, 1, 4}
- 元素计数:
count
,空否:isEmpty
var citys : Set = ["shanghai","beijing","wuhan","hefei"]
citys.count
citys.isEmpty
- 插入:
insert
移除:remove
是否包含某元素:contains
citys.insert("nanchang")
citys.remove("shanghai")
citys.contains("wuhan")
- 转换为数组:
sorted
let cityArray = citys.sorted()
- 集合间的运算:交差并补,交集
intersection
,差集subtract
,并集union
,补集``
var xSet : Set = [1,2,3,4]
var ySet : Set = [3,4,5,6]
xSet.intersection(ySet) // 输出 {3, 4}
xSet.subtract(ySet) // 输出 {2, 1}
xSet.union(ySet) // 输出 {5, 6, 2, 3, 1, 4}
xSet.symmetricDifference(ySet) 输出 {5, 6, 2, 1}
- 集合间的关系,子集:
isSubset
(可以相等),严格子集isStrictSubset
let hSet : Set = [1,2,3]
let iSet : Set = [3,2,1,4]
hSet.isSubset(of: iSet) // 输出 true
hSet.isStrictSubset(of: iSet) // 输出 true
- 父集:
isSuperset
(可以相等),严格父集isStrictSuperset
iSet.isSuperset(of: hSet) // 输出 true
iSet.isStrictSuperset(of: hSet) // 输出 true
- 无交集:
isDisjoint
iSet.isDisjoint(with: hSet) // 输出 false
字典
值无序可重复,但每个值有唯一的键(key)。
- 用字典字面量来创建字典,键与值之间用冒号隔开.
var airports = ["PVG":"shanghai pudong","CHU":"Dalian", "DUB":"Dublin Airport"]
- 计数:
count
, 空否:isEmpty
airports.count
airports.isEmpty
- 添加或更新: 字典变量[键] = 值
airports["SHQ"] = "Hongqiao Airport"
airports["CHU"] = "南昌机场"
- 获取,可以用小标
airports["DUD"] // 如果没有对应键 返回nil
airports["SHQ"] // Hongqiao Airport
- 移除,用小标把值设为nil
airports["DUB"] = nil
- 循环一个字典for in,因为键值对有2个元素,用元组变量.
for (key, value) in airports {
print(key,value)
}
- 单独使用其中键或值,使用
keys
或values
(可使用for in
)
for key in airports.keys {
print(key)
}
- 把键值对分离成数组,用【数组类型】(字典变量.keys),【数组类型】(字典变量.values)
let codes = [String](airports.keys)
let airportFullname = [String](airports.values)
网友评论