swift 学习笔记

一:数组交换其中任意两个元素
 // 交换数组里面的两个元素
    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}

你可能感兴趣的:(swift 学习笔记)