/**
赋值运算符
= += %= *= /=
本质上是对内存的写操作
*/
let b = 10
var a = 9
var d:Int
a = 6
// c语言中可以这样子,但是 在swfit中 表达式 a = 6 是没有值的
// 在swift中禁止连续赋值
// d = a = 6
print("a的值\(a)")
print("a = 6表达式的值==\(a = 6)")
// 加括号的连续赋值都不行的呀
// d = (a += 6)
/**
像这种就会报错的
因为Swift的赋值操作并不返回任何值。
这个特性防止程序员将 c == 6 的判断误写成 c = 6,减少了常规的编码错误
Use of '=' in a boolean context, did you mean '=='?
*/
// if c = 6 {
// print("lalla")
// }
/**
溢出运算符 &+ &- &*
*/
var c = UInt8.min
/**
Arithmetic operation '0 - 1' (on type 'UInt8') results in an overflow
*/
// c = c - 1
c = c &- 1
print("c==\(c)")
/**
c==255
*/
/**
Swift中可以 对浮点数求余
*/
/**
'%' is unavailable: Use truncatingRemainder instead
现在不可以直接这样写了
let rem = 10 % 2.3
*/
let rem = CGFloat(10).truncatingRemainder(dividingBy: 2.3);
print("rem==\(rem)")
/**
rem==0.800000000000001
remainderA is '1.0'.
remainderB is '2.1'.
*/
var remainderA = CGFloat(3).truncatingRemainder(dividingBy: 2);
print("remainderA is '\(remainderA)'.") // 输出 remainderA is '1'
var remainderB = CGFloat(5.2).truncatingRemainder(dividingBy: 3.1)
print("remainderB is '\(remainderB)'.") // 输出 remainderB is '2.1'
/**
空合并运算符 (a ?? b) 将对可选类型a进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b。
两个条件:表达式a必须是可选类型,默认值b的类型必须要和a存储值的类型一致
在 Swift中有一个非常有用的操作符,可以用来快速的对 nil 进行判断。
??
这个操作符可以判断当左侧的值是 非 nil时 Optional值时返回其value,
左侧为nil时返回其右侧的值。比如
*/
var level: Int?
var startLevel = 1
var currentLevel = level ?? startLevel
print("currentLevel==\(currentLevel)")
let name: String? = "老王"
let name1: String? = nil
// ?? 运算符的优先级低于 + 号,注意使用的时候加上括号啊
print(name ?? "" + "你好")
print(name1 ?? "" + "你好")
addNumber(x: 3, y: nil)
func addNumber(x: Int?, y: Int?) -> Void {
// 1.强制解包有风险
// print(x! + y!)
// 2.使用 if 判断,但是如果直接使用if,参数很多的时候,会使代码很丑
if x != nil && y != nil {
print(x! + y!)
} else {
print("x 或者 y 为nil")
}
// 使用 运算符 ??
print((x ?? 0) + (y ?? 0))
}