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))

  

 

 

 

 

 

 

 

posted @ 2016-06-16 15:13  电蚊拍  阅读(235)  评论(0编辑  收藏  举报