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

      

     

     

     

     

     

     

     

  • 相关阅读:
    【Unity Shader 】CG语法
    编译boost到各个系统平台 mac,iOS,linux,android,wind
    c pvr转存pvr.ccz格式 (转 http://www.cnblogs.com/howeho/p/3586379.html)
    mac Nginx + FastCgi + Spawn-fcgi + c++
    得到指定占用宽度的字体 。(英文占用一个位,中文占用两个位,英文大写占用两个位)
    cocos2d 文件系统使用文件内存映射性能对比
    关于PUPBLD.SQL
    ora-01033:ORACLE initialization or shutdown in progress解决方法
    linux下如何查看命令的绝对路径
    【测试工具】http协议调试利器fiddler使用教程
  • 原文地址:https://www.cnblogs.com/chebaodaren/p/5591068.html
Copyright © 2011-2022 走看看