在不加特定修饰符的情况下,在swift类型中定义的属性,方法都是属于实例的。
可以使用static来声明枚举和结构体的类型属性/方法
使用class来声明类的类型属性/方法
swift对类型成员和实例成员的区分泾渭分明:通常来说,类型成员不允许访问实例成员,实例成员也不允许访问类型成员
/* 枚举可以包含类型存储属性和类型计算属性, 枚举可以包含实例计算属性,不能包含实例存储属性 */ //枚举的类型属性 enum Seasonz { static var desc : String? static let name = "jijie" static var info:String{ get{ return "test (desc)" } set{ print("the season is (newValue)") } } } Seasonz.desc = "jijielei" print(Seasonz.name) Seasonz.info = "new info" print(Seasonz.info) /* 结构体可以包含类型属性,包括类型存储属性和类型计算属性 结构体可以包含实例计算属性和实例存储属性 */ //结构体包含类型属性 struct FkRange{ static var desc : String? static let maxWidth = 1000 static let maxheight = 4000 static var maxArea : Int{ return maxWidth * maxheight } } FkRange.desc = "描述范围的结构体" print(FkRange.desc) print(FkRange.maxWidth) print(FkRange.maxheight) print(FkRange.maxArea) /* 类中不能定义类型存储属性,只能包含类型计算属性 类中可以包含实例存储属性,实例计算属性 */ //不能定义类型存储属性可能是为了保持与oc的兼容 class Users { class var nameMaxLength : Int{ get{ return 24 } set{ print("fuzhi (newValue)") } } } print(Users.nameMaxLength) Users.nameMaxLength = 20 //枚举的值类型方法 enum Seasonon { static var desc : String? static let name = "season" static func info(){ print("the name is (name)") } static func setDesc(desc : String){ self.desc = desc } } Seasonon.info() Seasonon.setDesc("describe the change of the weather") print(Seasonon.desc) /* 类型方法不能直接访问实例成员,如果希望在类型方法中访问实例成员,必须先创建该类型的实例,然后以实例作为调用者来访问实例成员 */ //类的类型方法 class Math { class var pi:Double{ return 3.1415926 } class func abs(value:Double) -> Double{ return value < 0 ? -value : value } class func pow(base:Double, _ exponent:Int) -> Double { var result = 1.0 for _ in 1...exponent { result *= base } return result } class func radian2Degree(redian:Double) -> Double { return redian * 180 / pi } class func degree2Radian(degree:Double) -> Double { return degree * self.pi / 180 } } print(Math.pi) print(Math.pow(2, 4)) print(Math.radian2Degree(1.57)) print(Math.degree2Radian(45))