• Swift学习 (三)


    3.函数:

    在Swift中函数的定义基本与OC一样。

    主要区别为:

    1. 通过func关键词定义函数

    2. 返回值在->关键词后标注

    各举一个类方法与实例方法例子。

    1
    2
    + (UIColor*)blackColor
    - (void)addSubview:(UIView *)view

    对应的swift版本

    1
    2
        class func blackColor() -> UIColor //类方法, 通过 class func 关键词声明
        func addSubview(view: UIView) //实例方法

    在我们的项目中,经常会不断进行功能的增添。为了新增特性,许多方法在开发的过程中不断变动。举一个例子:我们开始有一个tableViewCell,它的设置方法一开始简单地需要一个Model参数:

    1
    func configureCellWithModel(Model: model)

    不久之后,我们想对部分Cell增添一个设置背景颜色的功能。方法需要再接收多一个参数:

    1
    func configureCellWithModel(Model: model,color:UIColor)

    这个时候方法改变,所以涉及到这些方法的地方都需要修改。给我们造成的困扰

    一是:需要做许多重复修改的工作。

    二是:无法做得很好的扩展和定制,有些地方的cell需要设置颜色,有些不需要。但是在OC里,我们只能对所有的cell都赋值。你可能觉得我们可以写两个方法,一个接收颜色参数,一个不接受。但是我们知道这不是一个很好的解决方法,会造成冗余的代码,维护起来也不方便。

    而在Swift中,default parameter values的引入让我们能够这样修改我们的代码:

    1
    func configureCellWithModel(Model: model,color:UIColor = UIColor.whiteColor())

    这样的改进能让我们写出的代码更具向后兼容性,减少了我们的重复工作量。

    4.类与初始化(Initializers):

    在Swift中,我们通过Access Control来进行控制公有和私有属性和方法。

    properties, types, functions等能够进行版本控制的统称为实体。

    • Public:可以访问自己模块或应用中源文件里的任何实体,别人也可以访问引入该模块中源文件里的所有实体。通常情况下,某个接口或Framework是可以被任何人使用时,你可以将其设置为public级别。

    • Internal:可以访问自己模块或应用中源文件里的任何实体,但是别人不能访问该模块中源文件里的实体。通常情况下,某个接口或Framework作为内部结构使用时,你可以将其设置为internal级别。

    • Private:只能在当前源文件中使用的实体,称为私有实体。使用private级别,可以用作隐藏某些功能的实现细节

    一个小技巧,如果我们有一系列的私有方法,我们可以把它们组织起来,放进一个extension里,这样就不需要每个方法都标记private,同时也便于管理组织代码:

    1
    2
    3
    4
    5
    // MARK: Private
    private extension ViewController {
        func privateFunction() {
        }
    }

    创建对象与alloc和init

    关于初始化,在Swift中创建一个对象的语法很简洁:只需在类名后加一对圆括号即可。

    1
    var shape = Shape()

    在Swift中,initializer也与OC有所区别,Swift的初始化方法不返回数据。而在OC中我们通常返回一个self指针。

    Swift的初始化方法让我们只关注对象的初始化。之前在OC世界中为什么要self = [super init]?。这种问题得以避免。Swift帮助我们处理了alloc的过程。也让我们的代码更简洁明确。

    而在Swift中,init也有了更严格的规则。

    • 对于所有Stored Properties,都必须在对象被创建出来前设置好。也就是我们必须在init方法中赋好值,或是直接给属性提供一个默认值。

    如果有property可以被允许在初始出来时没有值,也就是需要在创建出来后再赋值,或是在程序运行过程都可能不会被赋值。那么这个property必须被声明为optional类型。该类型的属性会在init的时候初始化为nil.

    • initializer严格分为Designated Initializer和Convenience Initializer 并且有语法定义。

    而在Objective-C中没有明确语法标记哪个初始化方式是convenience方法。关于Designated Initializer可参阅之前的:Objective-C 拾遗:designated initializer

    1
    2
    3
    4
    5
    6
    7
    init(parameters) {
        statements
    }
     
    convenience init(parameters) {
        statements
    }
  • 相关阅读:
    form组件进阶_django
    form组件_django
    django的数据库ORM进阶操作
    内网安装python模块_python
    Redhat7.4安装oracle11.2.0.4版本数据库遇见的问题_oracle
    Redis基础数据类型与对象
    SpringIOC容器——ApplicationContext和BeanFactory
    AQS源码解析
    Java内存模型(一)
    面试准备笔记
  • 原文地址:https://www.cnblogs.com/pengsi/p/5120331.html
Copyright © 2020-2023  润新知