- 发布于2014年WWDC,支持iOS、OS X、watchOS,结合了C和Objective-C的优点的一门新语言。
- 特性
- 安全性 提供了更多安全措施,比如值使用前初始化、自动内存管理等。
- 快速性 llvm编译框架,运行速度快。
- 表现力 语法简单,易于阅读维护。
- 兼容性 继承了c语言和oc的特性,并克服了C的兼容性问题。
还有以下特点:
- 没有宏系统,其协议和扩展源自oc
- 采用let常量、var变量声明变量
- 没有显示指针,而是像C#语言一样,依赖值类型/引用类型
- 不支持强制转换
-
Swift具有强大的命名字符集,支持代码预览,我们可以通过playground来学习swift的语法
playground
file - new - playground
-
变量和常量
变量和常量都要有类型, 值必须与分配的类型相同,代码结尾;
不要求,加不加都不会报错,注释与OC相同
var aVariable = 100
aVariable = 50
let string = "string"
/** 多变量 逗号 分割 */
var x = 0.0, y = 0.0, z = 0.0
- 类型 写法
var 标识符:类型 = 初始值
let 标识符:类型 = 初始值
var name: String = "Mark"
let x: Int = 1
let y: Int = 2
let z: Int = 3
print(x + y + z)
- 字符串
支持转义字符,多行需要在首行、尾行添加三引号,并需要删除缩进效果
let label = "The width is "
let width = 100
let widthLabel = label + String(width)
print("The width is \(width)")
let quotation = """
I have \(x + y + z) apples.
And you said you
"""
- 数组、字典、集合、元组
数组:存放相同数据类型元素,有序
var productList = ["apple", "orange", "banana"]
productList[1] = "purple"
print(productList)
productList.append("water")
// 创建空数组
productList = []
print(productList)
let shoppingList: [String] = []
字典:存放key-value对元素
var productInfo = ["name": "apple", "price": String(4)]
productInfo["color"] = "green"
print(productInfo)
// 创建空字典
productInfo = [:]
print(productInfo)
let occupations: [String: Float] = [:]
集合:无序、不重复的相同类型元素
let favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
元组:不同数据类型元素的集合
let aturple = (21, 180, 60, "healthy", true)
- 可选类型Optional
可选类型Optional是Swift特有的数据类型,可选类型的值可能是某个类型的值也可能是nil(表示没有值),可选类型的定义,在类型后面加“?
”,nil
可以表示变量值缺失。
可选项类型
可选类型在使用的时候必须要拆包,下面提供Optional的三种使用方式:
-
隐式拆包
在定义可选类型的时候使用“!
”,后面使该可选类型的时候不需要强制解包
let string1: String! = "Hello"
string1.count
-
强制解包
使用可选类型变量时,在其后加“!
”,如果使用不合法编译器会报错。
let string0: String? = "Hello"
print(string0!)
string0!.count
// 添加保护判断,否则nil时会报错
if string0 != nil{
let count = string0!.count
print(count)
}
-
if-let可选绑定
使用if let临时常量 = 可选类型
来判断可选类型是否包含值,如果包含就把值赋给临时常量,否则(可选类型为nil时)if语句判断为假。
例1:
var optionalName: String? = "John"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello,\(name)"
print(greeting)
print(name)
}
例2:
var string5: String? = "Marry"
/**
① 使用`a ?? b`合并空值运算符的方式来解包,如果有值,则为count,如果为nil,则默认0
使用合并控制运算符有两个条件:
1. 表达式a必须是可选类型
2. 表达式b必须和a的处处类型相同
*/
if string5 != nil{
let count = string5?.count;
print(count ?? 0)
}
// 使用可选项绑定来判断可选项是否有值,如果有就赋值给临时变量。同一个if语句可以有多个可选项绑定,用, 分开即可
// ② 使用可选项绑定
if let tempStr = string5{
let count = tempStr.count
print(count)
}
- 条件语句
-
if
分支语句:
var teamScore: Float = 0
let personalScore = 51.0
if personalScore > 50.0{
teamScore += 3
}else{
teamScore += 1
}
print(teamScore)
-
switch
分支语句:
var vegetable = "red pepper"
switch vegetable{
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)")
default:
print("Everything tastes good in soup")
}
- 循环语句
for
循环:
var total = 0
for i in 0..<4{
total += i
}
print(total)
不使用循环每一项的值时,可以使用下划线“_
”替代变量名:
let max = 10
let base = 3
for _ in 1...max{
total += base
}
print(total)
循环取数组值:
let array = [1, 3, 5, 7, 9]
var total = 0
for num in array{
total += num
}
print(total)
取字典中值:
let interestingNumbers = ["Prime": [2, 3, 5, 7, 11, 13],"Fibonacci": [1, 1, 2, 3, 5, 8],"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
while循环(当型循环):
var n = 2
while n < 100{
n *= 2
}
print(n)
while-repeat循环(直到型循环:循环体至少执行一次)
var m = 2
repeat {
m *= 2
} while m < 100
print(m)
网友评论