OC 与 Swift 区别

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——

    privatepublic可去掉

    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——

后续待。。



猜你喜欢

转载自blog.csdn.net/haifangnihao/article/details/80941706
今日推荐