Swift详解之一 -------- 变量声明
变量声明1、普通变量swift 像javascript一样是可以智能推断类型的,他会根据我们变量的值来推断变量的类型
2、存储型变量或者存储型属性
例子: var str:String = "hellp world" //指定str是String类型 var age:Int = 10 //指定为int类型 你可以在全局,函数内,或者在类和结构体的声明(context)中使用这种形式来声明一个变量。当变量以这种形式 在全局或者一个函数内被声明时,它代表一个存储型变量。当它在类或者结构体中被声明时,它代表一个存储型变量属性。 3、计算型变量和计算型属性
var variable name: type { get { statements } set(setter name) { statements } } 例子: private var _aa :String = "" var aa:String { get{ return self._aa; } set{ self._aa=newValue; } } 然后在调用的时候很简单的 4、存储型变量监视器和属性监视器
var variable name: type = expression { willSet(setter name) { statements } didSet(setter name) { statements } } 例子: <swift> var age:Int = 0 { willSet { print("willset an new Value (newValue)") //willset监视器只有在变量或属性值被改变之前运行newvalue } didSet { print("didset an old value (oldValue) will change to age (age)") //didset监视器在变量或属性值被改变后立即运行oldvalue } } </swift> 这里willset监视器只有在变量或属性值被改变之前运行。新的值作为一个常量经过过willset监视器,因此不可以在 willset语句中改变它。didset监视器在变量或属性值被改变后立即运行。和willset监视器相反,为了以防止你仍然 需要获得旧的数据,旧变量值或者属性会经过didset监视器。这意味着,如果你在变量或属性自身的didiset监视器语句 中设置了一个值,你设置的新值会取代刚刚在willset监视器中经过的那个值。 我这里这个代码块在 let dm = Demo1() dm.age=20 dm.age=38 控制台打印的结果:
5、变量中的 ! 和 ?Swift里不会自动给变量赋初始值 也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化,如果没有初始化就会报错 var str : String
> error: variable 'str' used before being initialized
出错的原因就是在使用str这个变量之前,没有初始化这个变量,也就是这个变量根本就没有得到内存 这时候 我们可以使用optional类型,也就是后面跟一个? var str1:String?
//如果str1 == nil 就不会调用hashValue方法 也就不会执行if语句块
//如果str1 != nil 执行其hashValue方法 赋值给val
if let val = str1?.hashValue
{
print("has value")
}else
{
print("no value")
}
>>> 这时候 输出的是 no v alue
var str2:String?
str2="1"
//! 表示 确定str2一定有值 如果没有值 就会报错 一般在保证有值得情况下才会这么做
print(str2!.hashValue) //"4799450059485597623n"
//使用这种方式声明 在调用的时候不用加? or ! ,表示 调用的时候 肯定是有值的 如果没有值 就会报错
var str3: String!
str3 = "111"
print(str3.hashValue)
6、别名swift支持别名使用关键字 例子 : typealias myInt = Int //myInt 声明为Int的别名
var age : myInt = 10
当然还有很多使用! 和 ? 的地方 如委托之类的,在这里就补赘述了,关于变量这里先总结这么多以后有更多相关会继续补充。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |