swift 笔记
fileprivate 和 private
fileprivate 私有,文件内和扩展可以使用该变量
private 绝对私有,只能在类或者结构体内使用
static 在func 关键字之前
指定类方法,可被子类重写
class 在func 关键字之前
指定类方法,不能被子类重写,包含final特性
final 可以把属性,下标,等标记wei final 即可防止子类重写
http://www.jianshu.com/p/a9c9e7313438
关于as http://www.jianshu.com/p/edbdc60218d1
as keyword:Guaranteed conversion、 Upcasting
理解:字面理解就是有保证的转换,从派生类转换为基类的向上转型
// 将1转成float
let num = 1 as CGFloat
|------------------------
// dog转换到父类animal
class Animal {}
class Dog: Animal {}
let d = Dog()
d as Animal
as! keyword:Forced conversion、 Downcasting
理解:字面理解就是有强项转换,即向下转型,子类(派生类)向父类转换,官方解释说这是一个不被保证的转换,可能会因为强转的失败而会导致崩溃。同时 !是一个陷阱的标志,就像⚠️一样,用起来存在一定危险性
文/CoderTgg(简书作者)
原文链接:http://www.jianshu.com/p/edbdc60218d1
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
// Dog到Animal的转化
class Animal {}
class Dog: Animal {}
let a: Animal = Dog()
a as Dog // as不能将a转成Dog,即不能向下转换
a as! Dog // as!能强行将a转成Dog -> Bingo
as? keyword: Optional、 Nil
理解:Swfit代码写一段时间后会发现到处都是 ? ,这预示着如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional)。
// Dog、Cat和Animal的转换关系
class Animal {}
class Cat: Animal {}
class Dog: Animal {
var name = "Spot"
}
let dog: Dog? = nil
dog?.name // 选择调用,返回空值nil
dog!.name // 强行调用,报错
let animal: Animal = Cat()
animal as? Dog // 猫转狗失败,返回nil
animal as! Dog // 猫强行转狗,失败报错
在swift中有两种初始化方法,
1.指定初始化方法
- 指定初始化方法其实指的就是 init 方法
- 默认的init方法就是指定初始化方法
init方法不能嵌套使用
2.便利初始化方法
便利构造方法即在 init 方法前加上 convenience 关键字
从代码中我们可以得出结论:
1.便利构造方法必须调用指定构造方法,完成初始化,不能单独使用
2.便利构造方法可以嵌套使用,但最终都需要调用指定构造方法
3.指定构造方法不能嵌套使用
便利构造方法相比指定构造方法更加灵活,为我们开发提供方便,因为它更容易满足实际需要,我们在实际开发中,应根据需要来设计便利构造方法
required 修饰符 http://blog.csdn.net/jq2530469200/article/details/51672889
required修饰符的使用规则
1. required修饰符只能用于修饰类初始化方法。
2. 当子类含有异于父类的初始化方法时(初始化方法参数类型和数量异于父类),子类必须要实现父类的required初始化方法,并且也要使用required修饰符而不是override。
3. 当子类没有初始化方法时,可以不用实现父类的required初始化方法。