計算屬性相當於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方法總是只有一個形參,且該形參的類型與該計算屬性的類型相同,因此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關鍵字