Object-C---)Swift之(十)存储属性
程序员文章站
2022-03-23 19:45:50
计算属性相当于Object-C的getter、setter合成的属性,在Swift中结构体、类都可以定义计算属性
定义计算属性
[修饰符] var 计算属性名:属...
计算属性相当于Object-C的getter、setter合成的属性,在Swift中结构体、类都可以定义计算属性
定义计算属性
[修饰符] var 计算属性名:属性类型{ get{ //getter方法执行体,该方法必须有返回值 } [set(形参名) { //setter方法执行体,该方法一定不能有返回值 }] }
注意:var计算属性只能定义成变量形式
enum Season { case Spring,Summer,Fall,Winter var info:String { get{ print("正在执行getter方法") switch(self) { case .Spring: return "春暖花开" } default: return "此恨绵绵无绝期" } } set(newValue) { print("正在执行setter方法,传入参数为:\(newValue)") } } } var s=Season.Spring print(s.info)//访问info属性,实际就是调用对应的getter方法 s.info="秋高气爽"//对info属性赋值,实际就是调用对应的setter方法 }
再举一个类的例子
class User { var first:String="" var last:String="" var fullName:String { get { return first + "-" + last } set(newValue) { var names=newValue.componentsSeparatedByString("-") self.first=names[0] self.last=name[1] } } init(first:String,last:String) { self.first=first self.last=last } } let s=User(first:"六小龄童",last:"孙悟空") print(s.fullName) s.fullName="甄子丹-悟空" print(s.first)//输出甄子丹 print(s.last)//输出悟空
setter方法简化
计算属性的setter方法总是只有一个形参,且该形参的类型与该计算属性的类型相同,因此Swift允许在定义计算属性时省略set部分的形参名。
如果程序省略计算属性的set部分的形参名,程序将为该形参提供一个隐式的形参名:newValue。所以可以改为
set{ var names=newValue.componentsSeparatedByString("-") self.first=name[0] self.last=name[1] }
只读的计算属性
只有get部分的话称为只读的计算属性。我们可以省略get关键字和花括号
如上面的可以改为
var fullName:String{ return first + "-" + last }
注意即使是只读属性也必须用var关键字