http://www.cocoachina.com/ios/20160620/16769.html
1.id对应Anyobject 但是所有的Anyobject在swift中是可选值, 如果之前的值为可选值, 在被设置为Anyobject后就是多重可选值了
2.swift 中的闭包默认捕获变量的方式相当于 oc中block中捕获被标记为 __block的变量方式 -> 就是说 闭包捕获到的是变量的指针
3.swift中只要不是在多线程中, 建议使用[unowned self]来避免循环引用, 多线程中, 建议使用[weak self]
4.== 操作符相当于oc中的isEqual: --- 即比较内容是否相等;=== 相当于oc中的指针比较
5.继承自NSObject的子类如果重写了isEquals:方法, 应当提供 hash 这个属性
6.如果在swift中遇到oc中不支持的命名 可以利用 @objc(name)为他(属性 枚举, 方法名...)名个别名 eg.
// MARK:- 事件监听
extensionMainViewController{
// 事件的监听本质发送消息,但是发送消息是OC的特性
@objcfileprivatefunccomposeBtnClick() {
print("composeBtnClick")
}
}
7.dynamic 将属性或者方法标记为dynamic就是告诉编译器把它当作oc里的属性或方法来使用(runtime),当需要使用 KVO 或者 runtime的时候需要这样处理
8.当使用oc的 perform(selector, with:)方法的时候会返回一个可选值(指向AnyObject的指针);但是使用perform(:on:with:waitUntilDone:modes:) and perform(:with:afterDelay:)不会返回可选值
9.使用 #keyPath() 可以转换为string, #keyPath(class.property) == "property",可用于KVC 例如person.value(forKey: #keyPath(Person.name)) = person.name,
10.@IBDesignable 用在class(UIView的子类)声明的前面, 然后就可以在storyBoard中的inspector编辑它;@IBInspectable 用在(UIView的子类)的属性前面, 然后就可以在storyBoard中的inspector编辑它 ,就想系统提供的可以设置颜色,字体...
11.oc中的 copy属性 转换为swift中的@NSCopying 必须遵守NSCoding协议