一:数组交换其中任意两个元素
// 交换数组里面的两个元素
func swap(array: inout [T], a: Int, b: Int) {
if array.count > a && array.count > b {
(array[a], array[b]) = (array[b], array[a])
} else {
print("交换的数组越界了")
}
}
二:除法的一个函数
func divide(dividend: Double?, by divisor: Double?) -> Double? {
guard let dividend = dividend, let divisor = divisor, divisor != 0 else {
return nil
}
return dividend / divisor
}
三:闭包的作用域
var car = "aodi"
let closure = { [car] in
print("I drive \(car)")
}
car = "benchi"
closure()
// [car] in 相当于把car变量复制了一份,所有输出的是: I drive aodi , 如果把 [car] in 去掉就会输出: I drive benchi
四:Struct和Class的区别
Struct是值类型、Class是引用类型。
如果一个变量student被声明了struct并且是let类型的,那么他的属性也不能被改变,但是class 的话,可以改变属性,但是不能改变本身。
五:异常处理
/// 方法一:guard
func showKitten(kitten: Kitten?) {
guard let k = kitten else {
print("There is no kitten")
return
}
print(k)
}
// 方法二:添加throw
enum KittenError: ErrorType {
case NoKitten
}
struct Kitten {
}
func showKitten(kitten: Kitten?) throws {
guard let k = kitten else {
print("There is no kitten")
throw KittenError.NoKitten
}
print(k)
}
try showKitten(nil)
// 方法三:
struct Kitten {
}
func showKitten(kitten: Kitten?) {
guard let k = kitten else {
print("There is no kitten")
fatalError()
}
print(k)
}
六:swift map的用法。
// 把整形的数组转换为字符串的数组。
let arr: [Int] = [1, 2, 2, 5]
print(arr)
let lastArr = arr.map {
String($0)
}
print(lastArr)
七:open关键字和public关键字区别
鉴于当前写时候是 Swift3.x, 现在共有5种权限控制关键字,之后 Swift4 又会有变化.
open
open 修饰的 class 在 Module 内部和外部都可以被访问和继承
open 修饰的 func 在 Module 内部和外部都可以被访问和重载(override)
Public
public 修饰的 class 在 Module 内部可以访问和继承,在外部只能访问
public 修饰的 func 在 Module 内部可以被访问和重载(override),在外部只能访问
八:求一个整数的平方
// Int的延展
extension Int {
var squared: Int { return self * self}
}
5.squared // 25
5.squared.squared // 625
九:遍历数组的所有元素
// 利用泛型
func printElementFromArray(a: [T]) {
for element in a {
print(element)
}
}
十:利用guard let 避免嵌套
func loginAction() {
guard let username = username, let pwd = pwd else {return}
print("welcome: \(username)")
}
十一:初始化两个有关系的变量
// 无论更改radius还是diameter,另一个都会跟着变化其中newValue是系统的变量。
var radius: Double = 10 // 默认半径是10
var diameter: Double {
get {return radius * 2}
set {radius = newValue/2.0}
}
十二:函数式编程获取1到10的偶数
var events = (1...10).filter {$0 % 2 == 0}