美文网首页面试好文
iOS之Swift和OC的区别

iOS之Swift和OC的区别

作者: 賣女孩的小火柴 | 来源:发表于2021-03-15 15:37 被阅读0次

    1.base class 

        Swift中可以定义不继承于其它类的类,称之为基类(base class),而OC的类都是继承自NSObject。

    2.switch

        在OC中的Switch:

            不能判断对象类型, 只能判断基本类型中的整数;可以穿透;default位置可以随便放。

        在Swift中的Switch:

            可以判断对象类型,支持对象类型、元组、区间、double类型等等;默认不穿透,可以写fallthough穿透;可以不写break,如果写了default,default得放在最后。

    3.final关键字

        Swift中的final修饰符可以防止类被继承,还可以防止子类重写父类的属性、方法以及下标。

    4.guard、inout

        Swift中,guard关键字只能作用在函数中,guard关键字必须和else同时出现,guard关键字只有在条件为false的时候会走else语句,反之执行后边语句。

        Swift中,inout是修饰函数参数类型,表示该参数在函数内修改后(即函数返回后),其值为修改后的值。

    5.运算符重载

        OC是不支持重载的,Swift是支持重载的。

    6.命名空间

        OC没有命名空间,但是在为了区分在不同框架中可能会使用相同名字的变量冲突的情况,OC使用前缀来区别。

        Swift有命名空间,默认就是项目名称,同一个命名空间全局共享,这也是Swift不需要在import头文件。

    7.swift类型安全,oc更灵活

        类型安全语言需要代码里值的类型非常明确。

    8.可选类型

        Swift引入了可选项类型,用于处理变量值不存在的情况。Optionals类似于OC中指向nil的指针,但是适用于所有数据类型,而非仅仅局限于类,Optionals相比于OC中的nil指针,更加安全和简明。

    9.字符串插值、String.Index

        OC:[NSStringstringWithFormat:@"%d",10];

        Swift: "\(10)"

    10.OC是动态、Swift是静态(函数内联)

        Swift 编译时就确定了调用的方法,OC是调用之前通过虚函数表来确定调用的方法。

    11.泛型

        泛型是用来使代码能安全工作,Swift中的范型可以在函数数据和普通数据类型中使用,例如类、结构体或枚举。范型可以解决代码复用的问题。

    12.访问权限

        Swift又新增了两种访问控制权限 fileprivate和 open。Swift中访问权限由大到小依次为:open > public > internal(默认)> fileprivate >private。

            open:可以在任何地方访问,包括override和继承。

            public:可以在任何地方访问,但其他module中不可以被override和继承,而在本module内可以被override和继承。

            internal:修饰的属性或方法在整个模块内都可以访问,系统默认。

            fileprivate:在当前文件内可以被访问。

            private:在当前类中能被访问。  

    13.enum

        Swift 的枚举成员在被创建时本身就是完备的值,这些值的类型是已经明确定义好的 Direction 类型. 不会像 Objective-C 一样被赋予一个默认的整型值。

    14.swift 反射机制

        所谓反射就是可以动态获取类型、成员信息,同时在运行时(而非编译时)可以动态调用任意方法、属性等行为的特性。反射最重要的目的,就是为了解耦。

    在Swift中并不提倡使用Runtime,而是像其他语言一样使用反射(Reflect)。Swift的反射机制是基于一个叫 Mirror 的 struct 来实现的。

    Swift其他功能:

    1.范围运算符:

        a...b 表示 [a,b] 包括a和b 。 (如3...5  就是范围取3,4,5)

        a..<b 表示 [a,b) 包括a,不包括b 。 (如3..<5  就是范围取3,4)

        常见的如for循环:for i in 0...9{}

    2.独有的元组类型

        元组(tuples)把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型。

       eg: var value = (Int,String) = (x:15,y:"abc")    

    3.swift中使用let定义常量,var定义变量

        使用常量,更加安全,不能够被修改,在需要对对象进行修改的时候只能用var修饰

    4.if let 、 guard let 

        缩减代码量,安全处理数据逻辑,作用是解包。

    5.defer 

        defer block 里的代码会在函数 return 之前执行,无论函数是从哪个分支 return 的,还是有 throw,还是自然而然走到最后一行。    

    6.高阶函数

        高阶函数仅仅只是一个函数,其可以接收函数作为参数,或者返回一个函数来操作其他函数。Swift的集合类型中就有这些高阶函数:Map, FlatMap, Filter, 和Reduce。

    Swift优点:

    1.Swift容易阅读,语法和文件结构简易化。

    2.Swift更易于维护,文件分离后结构更清晰。

    3.Swift更加安全,它是类型安全的语言。

    4.Swift代码更少,简洁的语法,可以省去大量冗余代码。

    5.Swift速度更快,运算性能更高。

    相关文章

      网友评论

        本文标题:iOS之Swift和OC的区别

        本文链接:https://www.haomeiwen.com/subject/kxxkcltx.html