美文网首页
Swift优缺点

Swift优缺点

作者: Lizzzzzzhen | 来源:发表于2022-06-04 17:04 被阅读0次

    Swift和OC共用一套运行时环境,Swift的类型可以桥接到OC,反之亦然。两者可以互相引用混合编程。
    Swift新出的一些新兴概念,这些是OC没有的,比如泛型、元组等。
    优点

    1. 简洁的语法,性能较好
      swift比OC精简,整个项目少了.h文件,以及头文件的引入,效率提升1.3倍。
    2. swift更加安全
      类型安全的语言,可选类型,强制解包等 if letguard let
    3. 定义变量简单
      定义变量不区分整型,浮点型等,变量使用var,常量使用let。
    4. 函数式编程的支持
      filter,map,reduce,flatMap,compactMap等。
      swift本身提供了对函数式编程的支持,OC本身是不支持的,需要引入ReactiveCocoa这个库才支持。
    5. 可视化互动效果
      开发工具带来了Xcode Playgrounds功能,该功能提供强大的互动效果,能让swift源代码在撰写过程中实时显示出其运行结果。
    6. 精准报错
      报错的时候直接显示报错行。

    缺点

    1. 版本不稳定。
    2. 使用比例偏低。
    3. swift开源库较少,不过正在改变中。
    4. App体积变大,多出5~8M,由于版本不稳定,iOS系统库中并没有包含swift的运行库,反而是每个App都要包含其对应的swift运行库。
    5. 公司使用比例不高,很多公司以稳为主,很少一些在进行混合开发,更少一些是swift开发。
    6. 纯swift的运行时和OC有本质区别,一些OC中强大的运行时功能,在纯swift中变无效了。

    1. swift可选类型

    swift引入可选类型,用于处理变量值不存在的情况,Optionals类似于OC中指向nil的指针,但是适用于所有数据类型,而非仅仅局限于类,Options相比于OC中nil指针,更加安全和简明,并且也是Swift诸多强大功能的核心。

    2. swift中泛型

    解决代码复用问题
    例如两个方法类似,主要是参数类型的区别

    func isIntEqual(x: Int, y: Int) -> Bool {
        return x == y
    }
    
    func isStringEqual(x: Int, y: Int) -> Bool {
        return x == y
    }
    

    可以利用泛型合并一下:

    func isObjEqual<T: Equaltable>(x: T, y: T) -> Bool {
        return x == y
    }
    

    当使用时,如果将两个不同类型的数进行比较,编译器会马上提醒我们,从而快速避免这种情况。

    3. 访问权限变更

    swift新增两种权限,fileprivate,open,权限更细化。
    open、public、internal(默认)、fileprivate、private
    开放权限依次从大到小

    • open:可以被任何人使用,包括override和继承。
    • public:可以被任何人访问,但其他module中不可以被override和继承,在本module中可以被override和继承。
    • internal:系统默认访问级别,internal修饰符可写可不写,访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。
      如果是框架或者库代码,则整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。
      如果是App代码,也是在这个App代码,也是整个App内部可以访问。
    • fileprivate:表示这个元素的访问权限为文件内私有,包括extension时可以访问
    • private:只在当前类或结构体的作用域可访问。

    4.Swift便捷的函数式编程

    4.1、map

    var values = [1, 3, 5, 7]
    let result = values.map( { (element) -> Int in
        return element * 2
    }) // [2, 6, 10, 14]
    

    4.2、filter

    var result = [1, 3, 5, 7, 9]
    let flattenResult = result.filter{ $0 % 3 == 0 }
    // [3, 9]
    

    4.3、reduce

    var result = [1, 3, 5]
    let initialResult = 10
    var reduceResult = values.reduce(initialResult, combine: { $0 + $1 })
    print(reduceResult) // 10 + 1 + 3 + 5 = 19
    

    4.4、flatMap(合并集合)

    let arrayNumbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    print(arrayNumbers.flatMap{ $0 }) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(arrayNumbers.flatMap{ $0.map{ $0 *10 } }) // [10, 20, 30, 40, 50, 60, 70, 80, 90]
    print(arrayNumbers.flatMap{ $0.filter{ $0 > 4 } }) // [5, 6, 7, 8, 9]
    

    4.5、compactMap(过滤空值)

    let names: [String?] = ["zhangsan", nil, "lisi", "wangwu", nil, "zhaoliu"]
    print(names.count) // 6
    print(names.compactMap{ $0 }) // ["zhangsan", "lisi", "wangwu", "zhaoliu"] 过滤了空值
    
    // 打印不是空值的字符串的个数
    print(names.compactMap{ $0?.count }) // [8, 4, 6, 7]
    

    5. Swift独有的元组类型

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

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

    6. Swift中使用let定义常量,var定义变量

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

    7. 细节使用区别

    1. swift不区分.h和.m,一个类只有.swift一个文件,所以整体的文件数量比起OC有一定的减少。
    2. swift句尾不需要分号,除非想在一行中写三行代码,加分号隔开。
    3. swift数据类型都会自动判断,只区分常量let和变量var。
    4. 强制类型转换格式不同,OC强转:(Int)a。swift:Int(a)。
    5. 关于BOOL类型更加严格,swift不再是OC的非0就是真,而是true才是真,false才是假。
    6. swift循环语句中必须加{},就算只有一行也要加。
    7. swift的swift语句后面可以跟各种数据类型,如Int,字符串都行,并且里面不需要写break。
    8. swift if后的括号可以省略,if a > b {},而OC里if后面必须写括号。
    9. swift打印用 print("")打印变量可以 print("(value)")不用像oc一样写很多%d,%@等。
    10. swift的【Any】可以代表任意类型的值,无论是类、枚举、结构体还是其它swift类型,这个对应OC中的【id】类型。

    相关文章

      网友评论

          本文标题:Swift优缺点

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