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 [Any]   //array

           data is [String: Any]  //dictionary

           data is NSNumber

 

三、set & get 方法

OC——

- (void)setModel:(SquareLiveListModel *)model {

    _model = model;

}

 

swift——

    privatepublic可去掉

    var cName:String {

        get {return self.cName}

        set (newTitle) {

            //如果没有定义 newTitle,可以使用 newValue

            self.cName = newTitle

        }

    }

swift 中我们 不能使用  _model 来表示 OC 中@property 修饰的变量值 。在set&get方法中直接调用 会崩溃,故swift中用一个中间变量newValue来实现功能

 

四、willSet & didSet

var name: String? {

        //在属性name即将被赋值前 执行

        willSet {

            // newValue —— 待赋 新值, 此时属性name的值还是之前久值

            if newValue, newValue != name {

            }

        }

        //在属性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——

后续待。。

 

 

你可能感兴趣的:(Swift)