Swift -- 7.5 类型属性,方法
在不加特定修饰符的情况下,在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))

浙公网安备 33010602011771号