运算符
基本的运算符与C语言无二致,并且对很多地方做了增强。
基本加减乘除,取正负,逻辑运算,组合赋值,比较运算,自增自减,三元运算 均与C语言完全一致,且swift加了类型数据溢出的检测。运算结果超出类型的最大值会给出提示
1
2let addNum = Int32.max
var res:Int32 = addNum + 1 // 这里会给出提示,因为res已放不下Int32的最大值 + 1的数据赋值运算的形式与C语言相同,但是swift的赋值不会返回值,也就是swift里不能像C语言中一样进行连续赋值,也不能在if判定里做赋值操作。
1
2
3
4
5var res = 1
var assign:Int
if assign = res // 这里会报语法错误
{
}增强的取余操作,可以对浮点数进行取余
1
2var res = 8 % 2.5
print("remainder = \(res)") // 此时res == 0.5 8 = 3 * 2.5 + 0.5针对可选类型加入空合运算符(??),形式是a ?? b, a必须是可选类型,b必须是可选类型内容的值类型
意思就是如果可选值a是nil,则会取b的值,就是简单化的三元运算符的操作。
1
2
3
4var optionStr:String? = "optional"
var optionInt:Int32? // 此时optionInt == nil
var resStr = optionStr ?? "NotReachHere" // optionStr非空,取optionStr的值
var resInt = optionInt ?? 42 // optionInt为空,取42赋给resInt区间运算符 ..< 与…,分别表示半开区间与闭区间
1 ..< 6 表示 1 2 3 4 5
1 … 6 表示 1 2 3 4 5 6
字符串
字符串字面量
由双引号括起来的一组Unicode字符集合(Swift中单个字符都是Unicode的形式)。
1
let stringDemo:String = "swift string demo"
空串构造
1
2let stringEmpty = "" // 直接使用空字符串初始化swift字符串
var anotherEmptyStr = String() // 使用swift的默认字符串构造字符串构成
Swift字符串都是单个Unicode字符构成,在Swift里是Character字符类型,可以使用字符串的characters属性来访问单个的String内部的Character字符集合,并可以通过for in的形式迭代出来
1
2
3
4
5
6let stringDemo = "雨燕 Swift"
// for .. in的形式遍历整个string
for char in stringDemo.characters
{
print("Single Character = \(char)")
}获取字符串的长度需要使用字符串的characters属性内的count属性
1
2
3var stringForTest = "SwiftTesting"
// 使用characters属性里的count属性获取共有多少个Unicode字符,即字符串的长度
print("string length = \(stringForTest.characters.count)")字符串比较
使用通用的等于与不等于来进行字符串比较,通用的比较操作符 (!= 与==)
1
2
3
4
5
6let string1 = "swift"
let string2 = "bugcode"
if string1 != string2
{
print("\(string1) is not same to \(string2)")
}Swift提供字符串前缀与后缀的比较方法,分别是hasPrefix, hasSuffix
1
2
3
4
5
6
7
8
9var prefixStr = "http://bugcode.net"
if prefixStr.hasPrefix("http://")
{
print("\(prefixStr) has prefix \'http://\'")
}
if prefixStr.hasSuffix("net")
{
// logic statements
}字符串插值,swift可以在字符串内以\()的形式来对其他格式的数据进行格式化。
1
2
3let intDemo:Int32 = 42
let floatDemo:Float = 10.2
print("string is \(intDemo) \(floatDemo)") // intDemo和floatDemo会被转换成字符串的形式字符串的访问与修改,因为swift的字符串采用的是Unicode的形式,每个的字符的长度是不一定的,所以牵引到某个字符需要从头对字符串进行索引查找,不可以像元组那样用String.index的方式来访问。Swift提供了一系列的访问属性和修改字符串的方法,并且可以按索引进行访问和修改,也可以按区间进行访问和修改。
startIndex 字符串第一个位置,endIndex 字符串最后一个位置的下一个位置,并不是有有效的String索引,字符的查找索引修改都基于这二个属性来操作。
可以独列一节来记录
获取字符串对应的utf的表示形式
utf-8与utf-16的utf形式直接使用字符串的utf8与utf16属性
1
2
3var utfStyleStr = "SwiftString"
utfStyleStr.utf8
utfStyleStr.utf16utf-32的使用unicodeScalars的集合属性来访问
1
2let utf32Str = "utf32"
utf32.unicodeScalars // 可通过for..in来遍历