OC 与 Swift 区别
一、block = 闭包
OC——block
typedef void(^successBlock)(NSURL* url,id data);
swift——闭包
typealias successBlock = (NSURL, AnyObject) -> Void;
@escaping 逃逸闭包 :闭包在函数执行完后才被调用,调用的地方超过了这函数的范围,eg:网络请求结束后的回调的闭包,因为发起请求后过了一段时间后这个闭包才执行.
@noescape 非逃逸闭包(默认) : 闭包在这个函数结束前被调用,eg:我们常用的Masonry和Snapkit的添加约束方法,因为这闭包是马上执行的。
二、class
OC——[object isKindOfClass:[NSArray class]]
[object isKindOfClass:[NSDictionary class]]
swift——data is Array<Any>
data is Dictionary<String, Any>
data is NSNumber
三、set & get 方法
OC——
- (void)setModel:(SquareLiveListModel *)model {
_model = model;
}
swift——
private和public可去掉
private var _model: SquareLiveListModel?
public var model: SquareLiveListModel? {
get {
return _model
}
set {
_model = newValue
}
}
swift 中我们 不能使用 _model 来表示 OC 中@property 修饰的变量值 。在set&get方法中直接调用 会崩溃,故swift中用一个中间变量来实现功能
四、willSet & didSet
var name: String? {
//需要在属性name变化前做点什么
willSet {
}
//在属性name变化后做点什么
didSet {
}
}
五、SEL
OC—— @selector(btnEvent:)
- (void)btnEvent:(UIButton *)sender {
}
swift—— #selector(btnEvent:)
@objc func btnEvent(sender: UIButton) {
}
六、guard
guard self.feed != nil else{
//self.feed==nil则返回0
return 0
}
if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。
OC——
后续待。。