Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,
也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化
。如果在使用变量之前不进行初始化就会报错:
- varstringValue:String
- //error:variable'stringValue'usedbeforebeinginitialized
- //lethashValue=stringValue.hashValue
- //^
- lethashValue=stringValue.hashValue
出错的原因就是在使用stringValue这个变量之前,没有初始化这个变量,也就是这个变量根本就没有得到内存,
这时就会出错。
那么我们可以使用optional类型,后面跟一个?就是了。
copy
//这就是optional,strValue自动得到默认值:nil
//这个nil跟Objective-C中的nil不同,不是指针,而是表示值不存在。
varstrValue:String?
//判断optional是否有值
ifstrValue{
//dowhatyouneedtodohere
}
copy
//optionalbinding
//如果strValue==nil,那么结果就是nil,不会调用String的hasValue
//如果strValue!=nil,就返回strValue对应的hashValue值并赋值给常量hashValue
iflethashValue=strValue?.hashValue{
//dosomethingifneccessary
}
在写协议(protocol)时,对于可选代理方法,也需要在调用时在函数名后跟着?,如:
copy
//@objc是用于处理Swift与OC之间的转换的,由于@optional是OC中的关键字,