// // main.swift // Swift计算属性 // // Created by Goddog on 15/7/20. // copyright © 2015年 Goddog. All rights reserved. // import Foundation print("swift的计算属性类似于Java的setter和getter方法,枚举、结构体、类都可以定义计算属性,都有set和get方法哦") /** 修饰符 var 计算属性名: 属性类型 { get { //get方法执行体,该方法必须有返回值 } set() { //set方法执行体,该方法一定不能有返回值 } } 其中修饰符、set可以省略 */ //枚举定义了一个计算属性 enum Season { case Spring,Summer,Fall,Winter var info: String { //定义get方法 get{ print("get方法") switch(self) { case .Spring: return "春" default: return "无" } } //定义set方法 set(newValue){ print("set方法") print("传入参数为:\(newValue)") } } } var a = Season.Spring print(a.info) //实际上是调用的getter方法 a.info = "秋" //实际上调用的setter方法 //上面的示例只是简单赋值,并没有真正赋值 class User { var first: String = "" var last: String = "" //定义计算属性 var fullName: String { //定义计算属性的first、last两个属性决定 get{ return first + "-" + last } //定义计算属性的set方法,改变first、last两个存储属性 set(newValue){ var names = newValue.componentsSeparatedByString("-") self.first = names[0] self.last = names[1] } } init(first: String,last: String) { self.first = first self.last = last } } let s = User(first: "曹",last: "操") print(s.fullName) //调用get方法 s.fullName = "刘-备" print("firstName: \(s.first),lastName: \(s.last)") //MARK: - setter方法简化 /** 计算属性的setter方法提供隐式的形参名,newValue 上面可以是 set{ var names = newValue.componentsSeparatedByString("-") self.first = names[0] self.last = names[1] } */ //MARK: - 只读的计算属性 //只有get部分,没有set部分的计算属性称之为只读的计算属性,而且只读计算属性定义部分甚至可以省略get关键字和花括号 class Cat { var first: String = "" var last: String = "" //定义只读计算属性,只有get部分(省略了) var fullName: String { return first + "-" + last } init(first: String,last: String) { self.first = first self.last = last } } let name = User(first: "孙",last: "权") print(name.fullName) //只读计算属性不能被赋值,程序只能获取只读计算属性的值