基本数据类型
Int、UInt
:整数型、非负整数Float、Double
:单精度浮点数、双精度浮点数Bool
:布偶值String、Character
:字符串、字符
其他类型
Array, Dictionary
:数组、字典Struct
:结构体Class
:类var
:变量let
:常量,必须在声明的时候赋值
类型别名
typealias
:类型别名
typealias newname = type
/// 定义Feet类型为Int类型
typealias Feet = Int
类型标注
// 方法一
var varB:Float
varB = 3.14159
print(varB)
// 方法二
let constB:Float = 3.14159
print(constB)
可选类型
- 在
Swift
中,普通的变量或常量不能赋值为nil
(空值),但是可选类型的变量或常量可以,用于表示一个值可能为nil
(空值)的情况,用问号❓表示
// 两种写法等价
var optionalInteger: Int?
var optionalInteger: Optional<Int>
- 强制解析:当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号
!
来获取值。
// myString是String类型,且是可选类型,可能为空
var myString:String?
// myString为Hello, Swift
myString = "Hello, Swift!"
// 强制解析myString,我知道它是存在值的
// 如果myString为nil会报错
print(myString!)
- 自动解析:你可以在声明可选变量时使用感叹号
!
替换问号?
。这样可选变量在使用时就不需要再加一个感叹号!
来获取值,它会自动解析。
// 自动解析
var myString:String!
myString = "Hello, Swift!"
print(myString)
print输出
\()
的使用
let name = "菜鸟教程"
let site = "http://www.runoob.com"
print("\(name)的官网地址为:\(site)")
- 转义字符
转义字符 | 含义 |
---|---|
\0 | 空字符 |
\\ | 反斜线 \ |
\n | 换行符 |
\r | 回车符 |
\’ | 单引号 |
\" | 双引号 |
其他进制表示
- 二进制前缀为
0b
,八进制前缀为0o
,十六进制前缀为0x
,十进制没有前缀
let decimalInteger = 17 // 17 - 十进制表示
let binaryInteger = 0b10001 // 17 - 二进制表示
let octalInteger = 0o21 // 17 - 八进制表示
let hexadecimalInteger = 0x11 // 17 - 十六进制表示
区间运算符
1...5
区间值为 1, 2, 3, 4 和 51..< 5
区间值为 1, 2, 3, 和 4
for index in 1...5 {
print("闭区间运算符:")
}
for index in 1..<5 {
print("半开区间运算符:")
}
合并空值运算符:??
- 合并空值运算符
a ?? b
如果可选项a
有值则展开,如果没有值,是nil
,则返回默认值b
- 表达式
a
必须是一个可选类型,表达式b
必须与a
的存储类型相同 - 合并空值运算符,实际上是三元运算符作用到
Optional
上的缩写a != nil ? a! : b
- 如果
a
的值是非空,b
的值将不会被考虑,也就是合并空值运算符是短路的
函数
runoob
:函数名,name、site
:参数,String
:返回值
func runoob(name: String, site: String) -> String {
return name + site
}
// 调用
print(runoob(name: "菜鸟教程:", site: "www.runoob.com"))
- 不带参数函数
func funcname() -> datatype {
return datatype
}
- 没有返回值
func runoob(site: String) {
print("官网:\(site)")
}
runoob(site: "http://www.baidu.com")
- 可变参数
func vari<N>(members: N...) {
for i in members {
print(i)
}
}
vari(members: 4,3,5)
vari(members: 4.5, 3.1, 5.6)
vari(members: "Google", "Baidu", "Runoob")
- 元组
tuple
类型让多个值作为一个复合值从函数中返回
func minMax(array: [Int]) -> (min: Int, max: Int) {
var currentMin = array[0]
var currentMax = array[0]
for value in array[1..<array.count] {
if value < currentMin {
currentMin = value
} else if value > currentMax {
currentMax = value
}
}
return (currentMin, currentMax)
}
let bounds = minMax(array: [8, -6, 2, 109, 3, 71])
print("最小值为 \(bounds.min) ,最大值为 \(bounds.max)")
枚举
// 定义枚举
enum DayWeek {
case SUNDAY
case MONDAT
case TUESDAY
case WEDNESDAY
case THURSDAY
case FRIDAY
case SATURDAY
}
// 快捷方式
enum DayWeek {
case SUNDAY, MONDAT, TUESDAY
}
// 使用枚举
var weekDay = DayWeek.TUESDAY
// 修改方法
weekDay = DayWeek.SATURDAY
// 简写方法
weekDay = .SATURDAY
- 原始值
枚举可以是字符串,字符,或者任何整型值或浮点型值。每个原始值在它的枚举声明中必须是唯一的
在原始值为整数的枚举时,不需要显式的为每一个成员赋值,Swift
会自动为你赋值,隐式赋值的值依次递增1,如果第一个值没有被赋初值,将会被自动置为0。
enum Month: Int {
case January = 1
case February
case March
}
// 快捷方式
enum Month: Int {
case January = 1, February, March
}
let month = Month.March.rawValue
print("数字月份为: \(month)。")
- 相关值
可以存放不同类型的枚举值
enum Student{
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Runoob")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case Student.Name(let studName):
print("学生的名字是: \(studName)。")
case Student.Mark(let Mark1, let Mark2, let Mark3):
print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。")
}