定义变量和常量
- 使用
let定义常量,必须在定义时为它赋值一次,且无法修改(会报错)。这意味着可以使用常量来定义在多个地方使用的确定值。 - 使用
var定义变量,可以多次赋值,同OC中的变量。
let aConstant = 99
aConstant = 100 //⚠️报错
var aVariable = 1
aVariable = 2 // 不会报错
Swift中,直接赋值来定义的常量和变量的类型通常可以省略。 如果不提供初始值的话(只有变量可以),则需要加上类型来指定其对应的类型:
let aConstantDouble: Double = 70
var aVariableDouble: Double
aVariableDouble = 70
字符串
定义
Swift字符串的基本操作可以参考这里,补充一个format初始化:
//format:我们自定义的格式 arguments:参数集合,要用一个小括号来包括
let str3:String=String(format: "%d+%d=%d", arguments: [3,4,7])
let str4:String=String(format: "%d+%d=%d", 3,4,7)
拼接
Swift中可以使用+直接拼接字符串(Swift中没有隐式转换的操作,需要创建新的实例来接收):
let label = "The width is "
let width = 94
let widthLabel = label + String(width)
也可以使用更便捷的方法在字符串中包含变量:在括号中写值,并在括号前加上反斜杠\(value),如
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
对于数组中元素的拼接,还有一个特殊的方式:
let arr = ["星","期","一"]
let today = arr.joined(separator: "__") //将数组中的数据通过分割字符串__进行拼接
枚举所有字符
//遍历
let myStr = "my name is De Shuai Dong 🌺 我的"
for char in myStr {
print(char);
}
获取字符串中指定索引处的字符
let s:String = "SwiftMineStudy"
//取从开始的位置数index等于3的字符
let sub0 = s.index(s.startIndex, offsetBy: 3)
//取从最后的位置数第二个的字符
let sub1 = s.index(s.endIndex, offsetBy: -2)
//从sub0的位置开始数接下来的第二位的字符
let sub2 = s.index(sub0, offsetBy: 2)
//同上
let sub3 = s.index(s.startIndex, offsetBy: 2)
//取sub0之前的一位字符
let sub4 = s.index(before: sub0)
//取sub0之后的一位字符
let sub5 = s.index(after: sub0)
//取sub0之前的左右字符串
let sub6 = s.prefix(upTo: sub0)
//取sub0之后的所有字符串
let sub7 = s.suffix(from: sub0)
字符串换行
//字符串换行
let quotation = """
I said "I have \(apples) apples."
And then I said "I have \(apples + oranges) pieces of fruit."
"""
字符串是否为空
//字符串是否为空
if s.isEmpty {
print("为空")
}else{
print("不为空")
}
字符串区间截取
//字符串区间截取
//方法一
let snowy = " Let it snow! "
let nsrange = NSRange(location: 3, length: 6)
let start = snowy.index(snowy.startIndex, offsetBy: nsrange.lowerBound)
let end = snowy.index(snowy.startIndex, offsetBy: nsrange.upperBound)
let substringRange = start..<end
//方法二
let values = "abcdefg"
let startSlicingIndex = values.index(values.startIndex, offsetBy: 3)
let endSlicingIndex = values.index(values.endIndex, offsetBy: -2)
let subvalues = values[startSlicingIndex...endSlicingIndex] // One-sided Slicing
字符串相关判断
//字符串前面是以某个字符串开头
if values .hasPrefix("a") {
// YES
}else{
// NO
}
//字符串后面是否以某个字符串结尾
if values.hasSuffix("a") {
// YES
}else{
// NO
}
字符串与int互转
//转int
let str5 = "123"
let intNum:Int = Int(str5)!
//转String
let int1 = 123
let string4:String = String(int1)
数组
OC中数组有可变(NSMutableArray)和不可变(NSArray)的区别,在Swift中,可以通过定义时使用let和var来定义,其性质与OC中一致:
// 对应NSArray
let constantArray = ["a", "b", "c", "d"]
// 对应NSMutableArray
var mutableArray = ["e", "f", "g", "h", "i"]
定义
定义时说明元素类型是为了方便阅读和纠错(也是个人比较推荐的方式),如果是明确的可以推断出类型信息,实际上是可以省略元素类型的。
// 定义没有初始值的数组
var someArray = [元素类型]()
var someArray = [元素类型](repeating: 元素的统一初始值, count: 数组长度)
// 定义有初始值的数组
var someArray:[String] = ["张三","李四"]
增删改查
仅针对可变数组(var定义的数组):
var someStrings = [String]()
/** 增加元素 **/
someStrings.append("20") // 增加单个元素
someStrings += ["40"] // 增加单个或多个元素
someStrings.insert("60", atIndex: 1) //在指定的位置插入元素
/** 删除元素 **/
someStrings.removeAll() //移除数组里面的所有元素并且清除内存
someStrings.removeAll(keepCapacity: true) //移除数组里面的所有元素并且决定是否保持数组原来的容量大小
let removed = someStrings.removeAtIndex(1) //移除指定下标的的元素,并将指定下标的元素返回,也可以不返回
someStrings.removeLast() // 这时有三个方法可用:removeLast(), removeAtIndex(), removeAll()
/** 替换元素 **/
someStrings[3] = "NEWSTING" // 直接使用下标进行替换即可
/** 取元素/定位元素 **/
let aString = someStrings[1] // 直接使用下标取元素
let index0 = someStrings.indexOf("NEWSTING") // 某一个元素在数组中的下标
遍历数组
// 使用for-in循环来遍历所有数组中的数据项:
for item in someStrings {
print(item)
}
// 使用enumerate() 方法来进行数组遍历:
for (index, item) in someStrings.enumerated() {
print("在 index = \(index) 位置上的值为 \(item)")
}
获取元素个数
// 判断是否空数组
someStrings.isEmpty
// 获取数组长度
someStrings.count
字典
定义
与数组类似,分别用let和var来表示定义时的可变和不可变:
// 不可变字典
let someDict:[String:Object] = ["name":"张三","age":18]
// 可变字典
var someDict = [String:Object]()
增删改查
//2.1添加元素
someDict["name"] = "why"
//2.2删除元素
someDict.removeValueForKey("name")
//2.3修改元素
//区别:如果字典中已经有了对应的key,那么会直接修改原来key中保存的value
//如果字典中没有对应的key,那么添加对应的key/value
someDict["name"] = "yz"
//2.4获取某一个元素
let name = someDict["name"]
遍历
// 遍历字典中所有的key
for key in someDict.keys {
print(key)
}
// 遍历字典中所有的value
for value in someDict.values {
print(value)
}
// 遍历字典中的所有的键值对
for (key, value) in someDict {
print(key)
print(value)
}
合并
let dic2:[String:Object] = ["height":"1.88", "phoneNum":"+86 110"]
// 与数组不同,字典不能用 += 来进行合并,必须用循环添加的方式:
for (key, value) in dic2 {
someDict[key] = value
}
获取元素个数
// 判断是否空字典
someDict.isEmpty
// 获取字典键值对个数
someDict.count