所在的位置: swift >> swift前景 >> Swift类的特性

Swift类的特性

治疗白癜风最好的医院 https://m.39.net/pf/bdfyy/
Swift类的特性可变性类实例是可变的。虽然对类实例的引用是个常量(let),不过你可以通过该引用修改实例属性的值。类的实例方法绝不能标记为mutating。多引用如果给定的类实例被赋予多个变量或作为参数传递给函数,那么你就拥有了对相同对象的多个引用。在Objective-C中,类是唯一一种对象类型。一些内建的Swift结构体类型会桥接到Objective-C的类类型,不过自定义的结构体类型却做不到这一点。因此,在使用Swift进行iOS编程时,使用类而非结构体的一个主要原因就是它能够与Objective-C和Cocoa互换。枚举与结构体是一类,类是另一类,这两类之间的主要差别在于前者是值类型,而后者是引用类型。值类型是不可变的。实际上,这意味着你无法修改值类型实例属性的值。设置实例属性的结构体或枚举的实例方法要被显式标记为mutating关键字。引用类型有缺点,但同样也有优点!优点在于传递类实例变得非常简单,你所传递的只是一个指针而已。无论对象实例有多大,多复杂;无论包含了多少属性,拥有多少数据量,传递实例都是非常快速且高效的,因为整个过程中不会产生新数据。此外,在传递时,类实例更为长久的生命周期对于其功能性和完整性是至关重要的;UIViewController需要是类而不能是结构体,因为无论如何传递,每个UIViewController实例都会表示运行着的应用的视图控制器体系中同一个真实存在且持久的视图控制器。在Swift中,当重写从父类继承下来的东西时,你需要在声明前显式使用关键字override。比如:重写父类方法值得注意的是,子类函数与父类函数同名并不一定就是重写。回忆一下,只要签名不同,Swift就可以区分开同名的两个函数,它们是不同的函数,因此子类中的实现并不是对父类中实现的重写。只有当子类重新定义了继承自父类的相同函数才是重写,所谓相同函数指的是名字相同(包括外部参数名相同)和签名相同。可以在类声明前加上关键字final防止类被继承,也可以在类成员声明前加上关键字final防止它被子类重写。便捷初始化器便捷初始化器使用关键字convenience标记。它是个委托初始化器,必须调用self.init(……)。此外,便捷初始化器必须要调用相同类的一个指定初始化器,否则就必须调用相同类的另一个便捷初始化器,这就构成了一个便捷初始化器链,并且最后要调用相同类的一个指定初始化器。无论何时,子类初始化器都不能设置父类的常量属性(let)。这是因为,当子类可以做除了初始化自己的属性以及调用其他初始化器之外的事情时,父类已经完成了自己的初始化,子类已经没有机会再初始化父类的常量属性了。类初始化器前面可以加上关键字required,这意味着子类不可以省略它。反过来,这又表示如果子类实现了指定初始化器,从而阻止了继承,那么它必须要重写该初始化器。


转载请注明:http://www.aierlanlan.com/cyrz/7885.html