1、Must call a designated initializer of the superclass
在控制器中使用init方法报错
2、不要直接使用init方法做模型,不能为空
3、扩展能为类添加新的便利构造器,但是它们不能为类添加新的指定构造器或析构器。指定构造器和析构器必须总是由原始的类实现来提供
4、计算属性添加扩展
extension Double {
var km: Double { return self * 1_000.0 }
var m : Double { return self }
var cm: Double { return self / 100.0 }
var mm: Double { return self / 1_000.0 }
var ft: Double { return self / 3.28084 }
}
5、Swift 中,许多基本类型,诸如String,Array和Dictionary类型均以结构体的形式实现。这意味着被赋值给新的常量或变量,或者被传入函数或方法中时,它们的值会被拷贝。Swift 管理所有的值拷贝以确保性能最优化,所以你没必要去回避赋值来保证性能最优化。
6、构造器
结构体的逐一成员构造器
为了简化指定构造器和便利构造器之间的调用关系,Swift 采用以下三条规则来限制构造器之间的代理调用:
规则 1
指定构造器必须调用其直接父类的的指定构造器。
规则 2
便利构造器必须调用同一类中定义的其它构造器。
规则 3
便利构造器必须最终导致一个指定构造器被调用。
一个更方便记忆的方法是:
指定构造器必须总是向上代理
便利构造器必须总是横向代理
可失败构造器(eg:init?())
可失败构造器的参数名和参数类型,不能与其它非可失败构造器的参数名,及其参数类型相同。这里所指的“失败”是指,如给构造器传入无效的参数值,或缺少某种所需的外部资源,又或是不满足某种必要的条件等。严格来说,构造器都不支持返回值。因为构造器本身的作用,只是为了确保对象能被正确构造。因此你只是用return nil表明可失败构造器构造失败,而不要用关键字return来表明构造成功
必要构造器
在类的构造器前添加required修饰符表明所有该类的子类都必须实现该构造器。如果子类继承的构造器能满足必要构造器的要求,则无须在子类中显式提供必要构造器的实现
7、使用可选链式调用代替强制展开
8、final
你可以通过把方法,属性或下标标记为final
来防止它们被重写,只需要在声明关键字前加上final
修饰符即可(例如:final var
,final func
,final class func
,以及final subscript
)。
如果你重写了final
方法,属性或下标,在编译时会报错。在类扩展中的方法,属性或下标也可以在扩展的定义里标记为 final 的。
你可以通过在关键字class
前添加final
修饰符(final class
)来将整个类标记为 final 的。这样的类是不可被继承的,试图继承这样的类会导致编译报错。
网友评论