Cowboy Tech

Swift进阶

Swift与Foundation

Swift原生类型是对Foudation更好的补充。无缝兼容 Foundation:将变量类型声明为NSXX即可

var str:NSString = "Hello, playground"
str.substringWithRange(NSRange(location: 0,length: 5))

var array:NSArray = [1,2,3,4]
array.componentsJoinedByString(",")
  1. String - NSString
  2. Int, Float, Double, Bool 以及其他与数字有关的类型 - NSNumber
  3. Array - NSArray
  4. Dictionary - NSDictionary
  5. Set – NSSet
  6. AnyObject – NSObject

值类型和引用类型

  1. struct 和 enum 定义的类型是值类型,使用 class 定义的为引用类型。
  2. 基本数据类型全是struct
  3. 处理大量数据并且频繁增减元素时, NSMutableArray、NSMutableDictionary和NSMutableSet,其他情况 Array 、Dictionary和Set好一点

命名空间

  1. 一个module 代表一个命名空间
  2. 主target就是一个module,创建framework和target就是新的module
  3. 不同module中就算类名相同,也可以通过module名进行区分, 不再需要给类名加上各种奇怪的前缀了

OC与Swift互相调用

OC调用Swift

# import "(moduleName)-Swift.h"

Swift调用OC:

//动态库:
 import moduleName

//静态库:
 moduleName-Bridging-Header.h  中引入OC头文件

使用C指针

const Type *        UnsafePointer<Type> 
Type *               UnsafeMutablePointer<Type>

int,bool 和 char 的对应 类型分别是 CInt,CBool 和 CChar.内存需要自己管理

泛型

泛型代码可以让你写出根据自我需求定义、适用于任何类型的,灵活且可重用的函数和类型。它可以让你避免重复的代码,用一种清晰和抽象的方式来表达代码的意图。
Swift 的数组和字典类型都是泛型集。

异常处理

enum Result<T> {
    case Success(T)
    case Failure(NSError)
}
  1. ErrorType
  2. 同步 API 使用异常机制: do try catch throw throws
  3. 异步 API 使用泛型枚举

guard

可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃.guard中解包得得到值可以用于后面的代码

属性观察

willSet didSet
初始化对象并不会触发
同样可以设置 NSLayoutConstraint的constant

@IBOutlet weak var myLabel: UILabel! {
    didSet {
        myLabel.textColor = UIColor.purpleColor()
    }
}

Extensions

扩展:就是向一个已有的类、结构体、枚举类型或者协议类型添加新功能。这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模)

协议扩展

在Swift2.0中,可以对协议进行属性或者方法的扩展,和扩展类与结构体类似。这让我们开启了面向协议编程的篇章。

map flatMap filter

  1. map:得到一个由闭包里面的返回值组成的新序列
  2. flatMap:与map类似的功能,但是会过滤掉返回值里面的nil值
  3. Filter:得到一个由闭包返回值为true的值组成的新序列

单例

单例:表示一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。

framework介绍

iOS 8后苹果开放了framework,也就是动态库的功能.和静态库在编译时和app代码链接并打进同一个二进制包中不同,动态库可以在运行时手动加载,这样就可以做很多事情

  1. 应用插件化
  2. 软件版本实时模块升级
  3. 共享可执行文件(仅可用于App Extension)
  4. use_frameworks! CocoaPods生成一个动态框架,其中包含了所有pods而非一个静态库 import moduleName