Swift详解之一 -------- 变量声明

Swift详解之一 -------- 变量声明,第1张

概述变量声明 1、普通变量 swift 像javascript一样是可以智能推断类型的,他会根据我们变量的值来推断变量的类型 var age = 10 // Int var name ="lily" //编译器会自动推断出String static let name = "MyClass" //静态常量 通过类名直接访问 eg: ClassName.name 2、存储型变量或者存储型属性 语法:var 变量声明 1、普通变量 swift 像JavaScript一样是可以智能推断类型的,他会根据我们变量的值来推断变量的类型

var age = 10 // Int
var name ="lily" //编译器会自动推断出String
static let name = "MyClass" //静态常量 通过类名直接访问 eg: Classname.name

2、存储型变量或者存储型属性

语法:var variable name: type = Expression

例子:

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;    }}

然后在调用的时候很简单的Classname.aa="xxx" 这个相当于调用了set ,print(Classname.aa) 这个相当于调用了get。 当然这边set是可以接收一个参数的 ,可以不谢默认是 newValue,也可以自己定义 ,如 set(myValue) { self._aa = myValue; } 当然我这里只是一个很简单的例子,在真实的项目中可能在get或者set值得时候需要对值进行判断或者一系列的计算后返回。根据实际项目而定。

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监视器中经过的那个值。

我这里这个代码块在 Demo1 类中写的 ,调用的时候如下:

let dm = Demo1()    dm.age=20    dm.age=38

控制台打印的结果:

willset an new Value 20
dIDset an old value 0 will change to age 20
willset an new Value 38
dIDset an old value 20 will change to 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方法 赋值给valif  let val = str1?.hashValue{    print("has value")}else{    print("no value")}>>> 这时候 输出的是 no v alue

?是尝试拆包 !是强制拆包

var str2:String?str2="1"//! 表示 确定str2一定有值 如果没有值 就会报错 一般在保证有值得情况下才会这么做print(str2!.hashValue)   //"4799450059485597623\n"
//使用这种方式声明 在调用的时候不用加? or ! ,表示 调用的时候 肯定是有值的 如果没有值 就会报错var str3: String!str3 = "111"print(str3.hashValue)
6、别名

swift支持别名使用关键字typealias

例子 :

typealias myInt = Int  //myInt 声明为Int的别名var age : myInt = 10

当然还有很多使用! 和 ? 的地方 如委托之类的,在这里就补赘述了,关于变量这里先总结这么多以后有更多相关会继续补充。

总结

以上是内存溢出为你收集整理的Swift详解之一 -------- 变量声明全部内容,希望文章能够帮你解决Swift详解之一 -------- 变量声明所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1085431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存