枚舉也具有屬性和方法匠题,這在c++中是不可想象的。
例如:
enum Device {
case iPad, iPhone, AppleTV, AppleWatch
func introduced() -> String {
switch self {
case .AppleTV:
return "\(self) was introduced 2006"
case .iPhone:
return "\(self) was introduced 2007"
case .iPad:
return "\(self) was introduced 2010"
case .AppleWatch:
return "\(self) was introduced 2014"
}
}
}
print(Device.AppleTV.introduced())
enum Device2 {
case iPad, iPhone
var year: Int {
switch self {
case .iPhone:
return 2007
case .iPad:
return 2010
}
}
}
print(Device2.iPad.year)
另外韭山,swift中將屬性分成存儲(chǔ)屬性和計(jì)算屬性冷溃,其中存儲(chǔ)屬性與c++相同(枚舉只有計(jì)算屬性,沒有存儲(chǔ)屬性似枕,結(jié)構(gòu)體和類才有存儲(chǔ)睡醒)。
swift的計(jì)算屬性語法:
var property:propertyType {
get {
}
set {
}
}
這與c++類定義一個(gè)成員變量年柠,再定義setter和getter類似,只是講以上方法都?xì)w在計(jì)算屬性里了冗恨。
屬性觀察器
swift的屬性觀察器語法如下:
class StepCounter {
var totalSteps: Int = 0 {
willSet {
print("About to set totalSteps to \(newValue)")
}
didSet {
print("Added \(totalSteps - oldValue) steps")
}
}
}
let stepA = StepCounter()
stepA.totalSteps = 200
let stepB = stepA
stepB.totalSteps = 300
print(stepA.totalSteps)
屬性觀察器用于監(jiān)控和響應(yīng)屬性的變化,c++有一些觀察機(jī)制掀抹,但概念與此相去甚遠(yuǎn)。
swift的類型屬性和類型方法與c++的靜態(tài)成員和靜態(tài)方法相似傲武,
也是要加前綴static。
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 1
}
}
enum SomeEnumeration {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 6
}
}
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}