官术网_书友最值得收藏!

Methods and computed variables

Say that it is important for us to know whether a person's title relates to a professional qualification that the person holds. Let's add a method to our enum to provide that information:

enum Title: String { 
case mr = "Mr"
case mrs = "Mrs"
case mister = "Master"
case miss = "Miss"
case dr = "Dr"
case prof = "Prof"
case other // Inferred as "other"
func isProfessional() -> Bool {
return self == Title.dr || self == Title.prof
}
}

For the list of titles that we have defined, Dr and Prof relate to professional qualifications, so we have our method return true if self (the instance of the enum type this method is called on) is equal to the dr case, or equal to the prof case.

This functionality feels more appropriate as a computed property since whether it isProfessional or not is intrinsic to the enum itself, and we don't need to do much work to determine the answer. So, let's change this into a property:

enum Title: String { 
case mr = "Mr"
case mrs = "Mrs"
case mister = "Master"
case miss = "Miss"
case dr = "Dr"
case prof = "Prof"
case other // Inferred as "other"

var isProfessional: Bool {
return self == Title.dr || self == Title.prof
}
}

Now, we can determine whether a title is a professional title by accessing the computed property on it:

let loganTitle = Title.mr
let xavierTitle = Title.prof
print(loganTitle.isProfessional) // false
print(xavierTitle.isProfessional) // true

We can't store new information on an enum, but being able to define methods and computed properties that provide extra information about the enum is really powerful.

主站蜘蛛池模板: 紫金县| 屯昌县| 清新县| 海伦市| 灵石县| 高雄县| 鱼台县| 克拉玛依市| 辽源市| 敦化市| 杭锦后旗| 故城县| 万山特区| 根河市| 图木舒克市| 措美县| 邓州市| 绵竹市| 新建县| 长宁县| 河曲县| 康马县| 长治市| 古丈县| 娱乐| 辰溪县| 邮箱| 社旗县| 喀什市| 黑山县| 新乡县| 中江县| 凤台县| 旺苍县| 滦平县| 福安市| 广汉市| 慈利县| 琼结县| 祥云县| 博湖县|