量值与基本数据类型
量值:变量和常量
swift使用var和let分别声明变量和常量;
swift可以自动识别数据类型,所以可以不声明数据类型直接复制 ;
- var a = 1, b = 2.9, c = "hello"
变量可以用中文,表情符号命名
但不能以数字开头命名
一般使用驼峰命名法
数据类型
整型 :一般都是UInt(自动适配机器位数)
浮点型:一般是double
布尔型:true / false ;swift的条件语句和逻辑判断语句必须用bool型 ;
元组: 类似类的使用,是简单数据的组合体
swift
//var people : (String, Int) = ("hello", 15) ;
//print(people.0) ;
//print(people.1) ;
//var (name, age) = people ;
//print(name) ;
//print(age) ;
var people : (name : String, age : Int) = ("hello", 15)
print(people.name) ;
对于复杂的数据,还是要使用类来实现
可选值类型:表示可能为nil
swift语言中,不允许直接使用为nil的数据;即使是进行nil判断的时候也不可以;
所以要使用?进行op封装 ;
swift
//var age : Int? //进行了optional封装,可以用来判断是否为nil,如果不为nil,则可以通过!来解包
//if age == nil {
// print("yes")
//}
//
//age = 15
//age!
var age : Int?
if let temp = age {//相当于把age拆包后的数据赋给常量temp
print(temp)
} else {
age = 18
print(age!) //op封装后的数据,使用时要!拆包
}
op封装后可以进行nil判断;
但要使用数据的值的时候,要对op封装的数据进行!解包
swift
var age : Int!
age = 16
print(age)
也可以在变量声明时使用!表示隐式解析;
但要注意的是(和书上讲的不一样):隐式解析只是系统假装认定你是自动拆包了的,但实际上直接使用的话还是可选值,还是需要去手动拆包调用。不然会有warn警告
为类型取别名
oc,c++,c使用typeof
swift使用typealias
swift
typealias year = Int ;
var age : year = 16 ;
print(age) ;
字符。字符串,集合类型
字符串类型
swift中的字符串类为String

swift
var a = 80
var str = String(describing: a.self)
print(str)
通过String(describing: a.self)可以实现类型转换
String类型还对"+"进行重载实现,可以实现字符串的拼接
除了"+",也可以通过在字符串中使用()语法实现不同数据类型转换为String后拼接
swift
var a = "hello"
var b = "world"
var c = a + b
var d = a + " " + b
print (c)
print (d)
var e = "hello \(b)"
字符类型
swift使用character类
swift
var a : Character = "a" ;
var b :[Character] = ["h","e","l","l","o"] ;
var c = String(b) //可以通过字符数组创建字符串
var d = Character ("\u{21}") ;
for e in c {
print(e)
}
for-in语法是重要的循环结构
转义字符


字符串类型的常用方法
swift
var str = ""
//if str.isEmpty {//判断是否为空字符串
// print("yes")
//}
//
//if str.count == 0 {
// print("yes")
//}
//
//var a = "30a"
//var b = "31a"
//if a > b {//按位比较
// print("yes")
//} else {
// print("NO")
//}
str = "hello"
//var startIndex = str.startIndex ;
//var endIndex = str.endIndex ;
//print(str[startIndex], str[str.index(after: startIndex)], str[str.index(before: endIndex)]) ;
//var str01 = str[startIndex...str.index(startIndex, offsetBy: 3)]
//var str02 = str[str.index(endIndex, offsetBy: -3) ..< endIndex]
//print(str01, str02)
var range = str.ranges(of: "ell") ;
str.append(" world")
str.insert("!", at: str.index(str.startIndex, offsetBy: 5)) ;
str.insert(contentsOf: ["O", "H"], at: str.index(str.startIndex, offsetBy: 5))
str.replaceSubrange(str.startIndex...str.index(str.startIndex, offsetBy: 5), with: "KK") ;
str.remove(at: str.index(str.startIndex, offsetBy: 7))
print(str)
str.removeSubrange(str.startIndex...str.index(str.startIndex, offsetBy: 3))
str.removeAll() ;
var str01 = "hello woeld"
var str02 = str01.uppercased() ;
var temp = str01.hasPrefix("he") ;
数组类型
Array类;
声明:
swift
var array : [Int]
var array01 :Array<Int>
创建数组:
swift
array = [1,2,3]
array01 = Array(arrayLiteral: 1,2,3) ;
空数组不为nil
含有大量重复元素数组的创建:
swift
array02 = [String] (repeating: "hello", count: 5) ;
array02 = Array(repeating: "b", count: 3)
数组可以相加:
swift
array02 = [] ; //想要创建空数组,要先对数据类型进行声明
array = array + array01
数组的常用方法:
swift
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array.count
array.isEmpty
array[0]
var array03 = array[0 ... 4]
print(type(of: array03))//这里的array03的类型不是array[Int},而是ArraySlice<Int>
var a = array.first
var b = array.last
array[0] = 0 ;
array[0...3] = [2, 2, 3, 4] ;
print(array)
array.append(10) ;
array.append(contentsOf: [25, 67])
array.insert(100, at: 2)
array.remove(at: 2) ;
array.removeFirst() ;
array.removeLast() ;
print(array) ;
array.removeFirst(3) ;
array.removeLast(3) ;
//array.removeSubrange(0...2)
array.replaceSubrange(0...2, with: [0, 1, 2])
if array.contains(2) {
print("yes")
}
array.removeAll()
for-in循环:
swift
var array01 = [0, 1, 2, 3, 4]
var array02 = [(1,2),(2,3),(3,4)]
for a in array01 {
print(a)
}
for b in array02 {
print(b)
}
for c in array01.enumerated() {
print(c)
}
for d in array02.indices {
print(d)
}
数组排序:
swift
var array = [1, 3, 2, 8, 4] ;
array.sort()
array.sort(by: >) ;
array.max()
array.min()
集合类型
Set,一个无序的集合 ;
swift
var set : Set<Int> = [0, 2, 5, 7] ;
set.count
set.isEmpty
set.contains(2)
set.max()
set.min()
set.insert(10)
set.remove(2)
print(set)
set.removeAll()
没有replace和append ;
swift
var set01: Set<Int> = [0, 6, 3 ,4]
var set02: Set<Int> = [2, 5, 3, 1]
set01.intersection(set02)//交集
set01.symmetricDifference(set02)//交集的补集
set01.union(set02)//并集
set01.subtracting(set02)//补集
set01.isSubset(of: set02)
set01.isSuperset(of: set02)
set01.isStrictSubset(of: set02)
set01.isStrictSuperset(of: set02)
for a in set01 {
print (a)
}
for b in set01.enumerated() {
print(b)
}
for c in set01.indices {
print(c)
}
for d in set01.sorted(by: <) {
print(d)
}
集合虽没有顺序,但可以排序后遍历
字典类型
创建字典:
swift
var dict :Dictionary<Int, Int>
dict = [2: 3, 3: 4, 4: 5]
var dict01: Dictionary<Int, Int> = [:] ;
常见用法:
swift
dict.count
dict.isEmpty
dict[2] = 8
dict.updateValue(10,forKey: 1)
print(dict.updateValue(9, forKey: 3)!)
dict.removeValue(forKey: 4)
for a in dict.keys {
print(a)
}
for b in dict.values {
print(b)
}
for c in dict {
print(c)
}
for (key, value) in dict {
print(key , value)
}
for d in dict.keys.sorted(by: <) {
print(d)
}
for (key, value) in dict.sorted(by: <) {
print(key , value)
}
注意和书上不一样的地方:updateValue方法即使键不存在,也会创建新的键值对 ;
排序默认是key排序