swift 学习笔记

一:数组交换其中任意两个元素
 // 交换数组里面的两个元素
    func swap<T>(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<T>(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}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift2.0 1.defer译为延缓、推迟之意类似栈 注意作用域,其次是调用顺序——即一个作用域结束(注意),...
    zeqinjie阅读 3,415评论 0 50
  • Swift属性 Swift属性将值跟特定的类,结构体,枚举关联。分为存储属性和计算属性,通常用于特定类型的实例。属...
    小小厨师阅读 886评论 0 0
  • 一直没有时间好好看一下swift,最近复习了一遍语法,这里记录swift学习过程中遇到的一些问题和要点,和Obje...
    bomo阅读 2,463评论 0 25
  • swift中常用关键字 **用作声明的关键字: ** class、deinit、enum、extension、fu...
    花前月下阅读 7,813评论 5 32
  • 十八年 单身 第一次 他说,想来找我,嗯 他醉了 他说:“可能是喝酒更让我清醒,可能是时间让我对你产生了感...
    远山在笑阅读 445评论 0 0