- 组合赋值运算符没有返回值
//这种是错误的
let b = a += 2
- 两个对象判断是否是一个对象
用 ===,!==来判断两个对象是否是一个对象,其实在判断内存地址.
==和!=来判断基本数据类型
class A {
}
class B {
}
var a = A()
var b = B()
var c = a
if a === c {
print("a === c")
}else{
print("a !== c")
}
注意:
1. 要判断两个基本类型的值是否相当应该用==和!=
2. 要判断两个字串是否相等应该用==和!=
3. 要判断两个对象内存地址相同应该用===和!==
- 元组的比较
元组里如果有Bool类型的元素是不能比较大小的
元组中如果元素个数大于等于7个也是不能比较的
(1, "zebra") < (2, "apple") // true,因为 1 小于 2
(3, "apple") < (3, "bird") // true,因为 3 等于 3,但是 apple 小于 bird
(4, "dog") == (4, "dog") // true,因为 4 等于 4,dog 等于 dog
- 可选类型总结
var a: String? = "fdsa"
//1. 强拆 (确定有值的时候)
var b = a!
print("b = \(b)")
//2. 空和运算符(不确定有值,如果为空就附一个值)
var c = a ?? "defaultStr"
print("c = \(c)")
//3. 可选绑定 (不确定有值,写一些逻辑)
if let d = a {
print("d = \(d)")
}else{
print("a为nil")
}
//类中如果有多个属性的嵌套可以使用?或者!来拆包
class A {
var b: B? = nil
}
class B {
var b: Double? = 2
}
var a1 = A()
var b1 = B()
var a11: Double? = a1.b?.b
var temp: Any = a11 ?? "fsd"
print("temp = \(temp)" )
print("a11 = \(a11)")
-
泛型总结
函数里会尽可能的使用泛型,如果泛型用不了再去考虑用Any,AnyObject。数组,字典,变量应该用Any,AnyObject -
区间运算符
var a = ["one","two","three","four","five"]
//1. 闭区间运算符
print("闭区间运算符")
for item in 0...2 {
print(item)
}
print("")
//2. 半闭区间运算符
print("半闭区间运算符")
for item in 0..<2 {
print(item)
}
print("")
//3. 单侧运算符
print("单侧运算符")
for item in a[1...] {
print(item)
}
print("")
for item in a[...2] {
print(item)
}
print("")
for item in a[..<2] {
print(item)
}
- 逻辑运算
OC中逻辑运算不允许组合运算,要加小括号解决,swift中没问题。
逻辑运算的组合运算元组是左结合的,就是说从左向右运算。
//逻辑运算组合运算
if 3 > 0 && 1 < 0 || 3 == 3 || 5 != 5 {
print("true")
}else{
print("false")
}