Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸

Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸

Swift语言快速入门v3.0

Swift语言快速入门v3.0

8.2.2  计算属性Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸

除了存储属性外,类中还可以定义计算属性。计算属性不存储值,而是提供了一个getter和setter来分别进行获取值和设置其他属性的值。getter使用get关键字进行定义,其一般形式如下Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸:

get{

return 某一属性值

}

setter使用set关键字进行定义,其一般语法形式如下Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸:

set(参数名称){

属性值=某一个值

}

当然,它也可以没有参数名称。这种情况会后面的内容中讲解。在计算属性中同时包含了getter和setter,其一般定义形式如下:

var 属性名:数据类型{

get{

return 某一属性值

}

set(参数名称){

属性值=某一个值

}

}

【示例8-7】以下代码定义了一个类WalletClass,用来保存钱包中的金额,其默认单位为美元。为了方便用户以人民币为单位进行访问值和设置值,所以使用了计算属性cal。代码如下Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸:

import Foundation

class WalletClass{

var money=0.0

 var cal:Double{                                                                                        //定义计算属性cal

        get{                                                                                            //定义getter

            var RMB=money*6.1

            return RMB                                                                  //返回以人民币为单位的金额

        }

        set(RMB){                                                                                 //定义setter

            money=RMB/6.1                                                         //返回以美元为单位的金额

        }

    }

}

var mywallet=WalletClass()

mywallet.cal=(20)

//输出

println(mywallet.cal)

println(mywallet.money)

运行结果如下所示:

20.0

3.27868852459016

Program ended with exit code: 0

注意:在使用计算属性时需要注意以下三点:

1.定义计算属性的关键字

在定义一个计算属性时,必须且只能使用var关键字,否则就会出现错误。以下的代码,将示例8-7的代码做了一些修改,代码如下Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸:

class WalletClass{

var money=0.0

let cal:Double{

get{

var RMB=money*6.1

return RMB

}

set(RMB){

money=RMB/6.1

}

}

}

在此代码中定义一个计算属性,但是使用了let关键字,导致程序出现了以下的错误Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸:

‘let’ declarations cannot be a computed property

2.数据类型

在定义计算属性时,一定要为属性指定一个明确的数据类型,否则就会出现错误提示。例如以下的代码,是将示例8-7中的代码做了一些修改。代码如下:

class WalletClass{

var money=0.0

var cal{                                                                                                   //没有设置cal的数据类型

get{

var RMB=money*6.1

return RMB

}

set(RMB){

money=RMB/6.1

}

}

}

在此代码中由于没有为计算属性指定一个明确的数据类型,导致程序出现了以下的错误信息:

Computed property must have an explicit type

3.set后面的参数类型

在使用计算属性时,set后面的参数类型要和返回值的类型相同,不需要再指定类型。否则,程序就会出现错误。如以下的代码,此代码是将示例8-7中的代码做了一下修改,代码如下:

class WalletClass{

var money=0.0

var cal:Double{                                                                                               //没有设置cal的数据类型

get{

var RMB=money*6.1

return RMB

}

set(RMB:String){                                                                         //为参数定义了数据类型

money=RMB/6.1

}

}

}

在此代码中,对set后面的参数RMB指定了数据类型,导致程序出现了以下的错误:

Expected ‘)’ after setter value name

Expected ‘{‘ to start setter definition

4.没有定义参数名称

如果计算属性的setter没有定义表示新值的参数名,则可以使用默认名称newValue。

【示例8-8】以下代码就使用了newValue来实现了华氏温度和摄氏温度的转换。代码如下:

import Foundation

class DegreeClass{

var degree=0.0

var cal :Double{

get{

var centigradedegree=(degree-32)/1.8

return centigradedegree

}

set{

  degree=1.8*newValue+32                                                 //没有定义参数名称,可以使用默认的

}

}

}

var degreeClass=DegreeClass()

degreeClass.cal=(10.0)

println(degreeClass.cal)

println(degreeClass.degree)

运行结果如下所示:

10.0

50.0

Program ended with exit code: 0

4.定义参数名后不能使用默认参数名

在set后面如果定义了参数名称,就不能再使用Swift默认的参数名称newValue。否则,就会导致程序出现错误。如以下的代码,将示例8-8做了一些修改,代码如下:

import Foundation

class DegreeClass{

var degree=0.0

var cal :Double{

get{

var centigradedegree=(degree-32)/1.8

return centigradedegree

}

 set(aaa){                                                                                                           //定义参数名称后,使用默认参数

            degree=1.8*newValue+32

        }

}

}

在此代码中,set后面定义了参数名称,但是又使用了默认的参数名称,导致程序出现了以下的错误:

Use of unresolved identifier ‘newValue’

5.setter和getter的省略

在计算属性中,如果只有一个getter,则称为只读计算属性。只读计算属性可以返回一个值,但不能设置新的值。

【示例8-9】以下将通过getter来获取名称的字符串。代码如下:

import Foundation

class PersonName{

var name:String=””

var returnName :String{

if (name.isEmpty) {

return “NULL”

}else{

return name

}

}

}

var personClass=PersonName()

println(“没有名字时\(personClass.returnName)”)

personClass.name=(“Tom”)

println(“有名字时\(personClass.returnName)”)

在此代码中,当刚创建实例PersonName后,就去访问returnName。由于name默认为空,所以会返回字符串”NULL”。再对name赋值后,再一次访问returnName。由于name不为空,所以会返回name的内容。运行结果如下所示:

没有名字时NULL

有名字时Tom

Program ended with exit code: 0

注意:1.在只读计算属性中,可以将get关键字和花括号去掉。2.在C#等其他语言中可以将属性分为只读属性(只有getter)、只写属性(只有setter)和可读可写属性。但是在Swift中就不同了,只有只读计算属性和可读可写计算属性两个。没有只写计算属性,否则程序就会出现错误,如以下的代码:

class PersonName{

var name:String=””

var setName :String{

set{

}

}

在此代码中定义了一个只写计算属性,导致程序出现了以下的错误:

Variable with a setter must also have a getter

Swift语言计算属性设置值定义计算属性的关键字Swift语言入门很简单大学霸

Comments are closed.