swift----学习心得三
可选类型
可选类型是swift的一个特色。他表示一个变量有可能有值,也可能没有值(nil).声明的方式是“数据类型+问号”而当要使用一个可选类型的变量是,要在后面加感叹号“!”。
var height:Int? //声明一个可选类型,默认值为nil
if height == nil{
print("你有多高?")
}else{
print("你有\(height!)高。")
}
height = 199 //给可选类型赋值
类型判断is 与 类型转换as
if 对象 is 类(类型判断is)
注意:is也可以用来检查某个类是否遵循了某个协议
if let m = 对象 as? 类
如果不确定类型转换能否成功,可以在as后面加问号“?”
AnyObject与Any的区别
AnyObject :代表任何class类型的对象实例。
Any :范围更广,代表除函数外任何类型的实例。
struct 和 class 的区别?
区别:
a. 类可以继承,结构体不可以
b. 可以让一个类的实例来反初始化,释放存储空间,结构体做不到
c. 类的对象是引用类型,而结构体是值类型。所以类的赋值是传递引用 ,结构体则是传值。
相同点:
a,类和结构体都可以扩展
b,定义属性用于储存值
c,定义方法用于提供功能
d,定义下标用于通过下标语法访问值
e,定义初始化器用于生成初始化值
class与staitc关键字的区别?
a. static 可以在类、结构体、或者枚举中使用。而 class 只能在类中使用。
b. static 可以修饰存储属性,static 修饰的存储属性称为静态变量(常量)。而 class 不能修饰存储属性。
c. static 修饰的计算属性不能被重写。而 class 修饰的可以被重写。
d. static 修饰的静态方法不能被重写。而 class 修饰的类方法可以被重写。
e. class 修饰的计算属性被重写时,可以使用 static 让其变为静态属性。 f. class 修饰的类方法被重写时,可以使用 static 让方法变为静态方法。
swift是如何解决循环引用问题的?
在 Swift 中有 2 种 弱 引用形式,unowned 和 weak。虽然它们的作用类似,但与它们相关实例生命周期的假设会略有不同,并且具有不同的性能特征。unowned 引用使用的场景是,原始实例永远不会为nil,闭包可以直接使用它,并且直接定义为显式解包可选值。当原始实例被析构后,在闭包中使用这个捕获值将导致崩溃。如果捕获原始实例在使用过程中可能为 nil ,必须将引用声明为 weak, 并且在使用之前验证这个引用的有效性。
如果捕获原始实例在使用过程中可能为nil,必须将引用声明为weak, 并且在使用之前验证这个引用的有效性。