区间运算符
func demo1() {
for i in 1...5 {
print(i)
}
let names: [String] = ["a", "b", "c", "d", "e"]
print(names[...3])
print(names[..<3])
print(names[2...])
let welcome = "hello,world"
let interval = "a"..."z"
for c in welcome {
if !interval.contains(String(c)) {
print("\(c)不是小写字母")
}
}
}
位运算符
位取反运算符( ~ )是对所有位的数字进行取反操作
位与运算符( & )可以对两个数的比特位进行合并。它会返回一个新的数,只有当这两
个数都是 1 的时候才能返回 1
位或运算符( | )可以对两个比特位进行比较,然后返回一个新的数,只要两个操作位任
意一个为 1 时,那么对应的位数就为 1
位异或运算符,或者说“互斥或”( ^ )可以对两个数的比特位进行比较。它返回一个
新的数,当两个操作数的对应位不相同时,该数的对应位就为 1
位左移运算符( << )和位右移运算符( >> )可以把所有位数的数字向左或向右移动一
个确定的位数
位左移和右移具有给整数乘以或除以二的效果。将一个数左移一位相当于把这个数翻
倍,将一个数右移一位相当于把这个数减半
func demo3() {
// 不借助临时变量,交换两个变量的值。
var a = 1, b = 2
let tempSwap = a ^ b
a = tempSwap^ a
b = tempSwap^ a
print("a: \(a), b: \(b)")
// 给定一个无符号整型(UInt)变量,求其二进制表示中 “1” 的个数,要求算法的执行效率尽可能的高。
func countOfOnes(num: Int) -> Int {
var count = 0
var new_num = num
while new_num != 0 {
count+= 1
new_num = new_num& (new_num - 1)
}
return count
}
print("---\(countOfOnes(num: 0x10101000))")
// 给定一个无符号整型(UInt)变量,判断是否为 2 的整数次幂。
func isPowerOfTwo(num: UInt) -> Bool {
(num& (num - 1)) == 0
}
print(isPowerOfTwo(num: 4))
// 很多成对出现的正整数保存在磁盘文件中,注意成对的数字不一定是相邻的,如 2, 3, 4,3, 4, 2……,由于意外有一个数字消失了,如何尽快找到是哪个数字消失了?
func findLostNum(nums: [UInt]) -> UInt {
var num: UInt = 0
for i in nums {
num = num^ i
}
return num
}
print(findLostNum(nums: [2, 3, 4, 4, 2]))
}
自定义运算符
struct Vector2D {
var x = 0
var y = 0
}
extension Vector2D {
static func + (left: Vector2D, right: Vector2D) -> Vector2D {
Vector2D(x: left.x + right.x, y: left.y + right.y)
}
static func += (left: inout Vector2D, right: Vector2D) -> Vector2D {
left.x += right.x
left.y += right.y
return left
}
static prefix func - (vector: Vector2D) -> Vector2D {
Vector2D(x: -vector.x, y: -vector.y)
}
}
流程控制
func demo1() {
let point = (9, 9)
switch point {
case (let distance, 0), (0, let distance):
print("On an axis, \(distance) from the origin")
case (let x, let y) where x == y:
print("(\(x), \(y)) is on the line x == y")
default:
print("Not on an axis")
}
guard #available(iOS 13.0, *) else {
print("ios < 13")
}
}