zoukankan      html  css  js  c++  java
  • 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))
    

      

     

     

     

     

     

     

     

  • 相关阅读:
    二、跳转指定页面的JS代码
    一、常规的JS页面跳转代码
    您在前一家公司的离职原因是什么?
    如果你在这次面试中没有被录用,你怎么打算?
    如果你在这次面试中没有被录用,你怎么打算?
    针对你们单位业务工作中出现的问题,你提出了一些很好的建议,得到了同事们的赞同,但你的领导并不满意。在这种情况下,你怎么办?
    进程与线程的区别
    work13
    work12
    day09
  • 原文地址:https://www.cnblogs.com/chebaodaren/p/5591068.html
Copyright © 2011-2022 走看看