一.let 与 var 的区别
let str = "不可变"
str = "不可以修改会报错"
var str = "可变"
str = "可修改"
二.布尔值
Swift 有一个基本的布尔Boolean类型,叫做Bool。布尔值指逻辑上的值,因为它们只能是真或者假。Swift 有两个布尔常量,true和false这里与OC有区别,true和false不等于1和0.
let i = 1
if i { // 这个例子不会通过编译,会报错}
if i == 1 {}//这么写才行
三.元组(不适合复杂的数据结构)
let datas = (12,"str",true)
let (num,str,istrue) = datas
print("\(num)+\(str)+\(istrue)")//12+str+true
四.可选类型 !和?的用法
let empty = nil//这种写法不允许,直接报错
let one = "hello"
let two = Int(one)//字符串很明显不能Int成功,所以two是个`Int?`可选类型
print(two) //会有警告,不会崩溃,原因是two是个`Int?`可选类型,two现在是nil
系统提示的解决办法:
print(two!) //会崩溃,!
要慎用,不能解包为nil的对象
!
的作用是“ 我知道这个可选类型肯定有值,请使用它。” 这被称为可选类型的强制解包.
注意: Swift中的nil不同于OC中的nil。 在OC中,nil 是一个指向不存在的对象的指针。 在Swift中,nil不是指针, 它是一个不存在值的特定类型的。 任何数据类型的可选类型都可以设置为 nil,而不仅仅是对象类型。
五.swift 闭包简写实际参数名$0、$1等理解
func addTo(_ add :Int) ->(Int,Int)->Int {
return {
num1,num2 in
return num1 + num2 + add
}
}
func addTo(_ add :Int) ->(Int,Int)->Int {
return {$0 + $1+ add}
}
上面这两种写法是一样的
如果你在闭包表达式中使用这些简写实际参数名,那么你可以在闭包的实际参数列表中忽略对其的定义,并且简写实际参数名的数字和类型将会从期望的函数类型中推断出来,in
关键字也能被省略.
let addTwo = addTo(2)
let resu = addTwo(6,2)//resu是10
六.String
字符串可以通过 + 号来连接
var stringA = "swift新特性-"
stringA += "字符串可直接拼接"
print( stringA )//swift新特性-字符串可直接拼接
字符串分割数组 -- 基于空格
let fullName = "First Last"
let fullNameArr = fullName.characters.split{$0 == " "}.map(String.init)
// 或者
// let fullNameArr = fullName.characters.split{" "}.map(String.init)
print(fullNameArr[0]) // First
print(fullNameArr[1]) // Last
七.数组
我们可以使用构造语法来创建一个由特定数据类型构成的空数组:
var someArray = [存放的数据类型]()
var someArray = [Int]()//只能存放Int数据类型
var someArray = [String]()//只能存放String数据类型
var someArray = [Any]()//存放任何数据类型
以下是创建一个初始化大小数组的语法:
var someArray = [SomeType](repeating: InitialValue, count: NumbeOfElements)
以下实例创建了一个类型为 Int ,数量为 3,初始值为 0 的空数组:
var someInts = [Int](repeating: 0, count: 3)
以下实例创建了含有三个元素的数组:
var someInts:[Int] = [10, 20, 30]
someInts += [40]
someInts.append(50)
someInts[1] = 22
print(someInts)//[10, 22, 30,40,50]
for循环遍历
for (index, item) in someInts.enumerated() {
print("在 index = \(index) 位置上的值为 \(item)")
}
数组合并
var intsA = [Int](repeating: 2, count:2)
var intsB = [Int](repeating: 1, count:3)
var intsC = intsA + intsB
print(intsC)//[2,2,1,1,1]
八.字典
创建字典
var someDict = [KeyType: ValueType]()
var someDict = [Int: Any]()//key不能为'Any'会报错,可以是Int类型和String类型
添加和删除键值对
someDict.updateValue("One 新的值", forKey: 1)//添加
someDict.removeValue(forKey: 2)//删除不存在的key不会有问题
遍历字典
for (key, value) in someDict.enumerate() {
print("字典键 \(key) - 字典值 \(value)")
}
字典转数组
let dictValues = [Any](someDict.values)