美文网首页iOS Developer
swift面相对象的基础<一>

swift面相对象的基础<一>

作者: shineDeveloper | 来源:发表于2016-11-26 14:28 被阅读31次

    面向对象的核心是类和对象,面向对象的三大特征:封装,继承和多肽。swift可以定义枚举,结构体和类三种面向对象的实例,支持定义存储属性,计算属性,方法,下标,构造器和嵌套类型

    这次说的是枚举,结构体和类的相关知识

    枚举

    //用于管理一组有限值的集合
    
    /*
     swift 定义枚举的语法格式
     
     enum 枚举名 {
     //使用case关键字列出所有的枚举值
     //枚举的其它成员
     }
     */
    //定义枚举
    enum season {
        case spring
        case summer
        case fall
        case winter
    }
    
    //1.使用一个case来列举所有的值
    enum season2 {
        case spring, summer, fall, winter
    }
    
    //2.使用枚举来声明变量
    var weather: season
    weather = season.spring//或者表示称.spring
    print(weather)
    
    
    //枚举和swift语句之间的联系
    var chooseday = season.fall
    switch chooseday{
    case .spring :
        print("春天")
    case .summer :
        print("夏天")
    case .fall :
        print("秋天")
    default :
        print("在家")//若是列出了season所有的枚举值,default可以省略
    }
    
    //为每一个枚举值赋值,即为原始值
    /*
     原始值的语法格式:
     enum 枚举值 : 原始值类型 {
     case 枚举值 = 原始值
     }
     在swift中不需要为每个枚举值指定原始值,它可以根据已经存在的原始值推断出前后的枚举值的原始
     值。这是用于原始值是整形的情况,如果原始值是字符串,或者是字符,就需要完全指定原始值。
     */
    
    enum weekday: Int {
        case mon , tur , wen = 3,thur, fri , sat , sun
    }
    
    enum season3 : Character {
        case spring = "春"
        case summer = "夏"
        case fall = "秋"
        case winter = "冬"
    }
    
    //获取枚举中的原始值
    print(weekday.fri.rawValue)//rawValue获取原始值
    
    //如何根据原始值获取枚举值
    var myseason = season3(rawValue: "春")
    if myseason != nil {
        switch (myseason) {
    //    case .spring :
    //        print("春天")
    //    case .summer :
    //        print("夏天")
        default :
            print("")
        }
    }
    
    //为枚举成员定义关联值
    /*
     swift不要求每一个成员拥有相同的关联值
     使用枚举值的时候也要指定她的关联值
     */
    enum planet {
        case earth(weight: Double , name: String)
        case mars(density: Double , name: String, weight: CGFloat)
        case venus(Double , String)
        case saturn
        case neptune
    }
    var p1 = planet.earth(weight: 1.0, name: "地球")
    var p2 = planet.venus(0.815, "金星")
    var p3 = planet.mars(density: 3.0, name: "火星", weight: 0.1)
    
    //获取关联值
    switch (p3) {
        //将关联值绑定到变量或者常量来提取
    case planet.earth(var weight , var name):
        print(weight, name)
        //将关联值都提取为常量或者变量,直将一个var或者let放置枚举成员之前
    case let planet.mars(density: d, name : n, weight: w):
        print(d,n,w)
    default:
        break
    }
    

    类和结构体

    //类和结构体
    /*
     定义类和结构体,创建实例,值类型与引用类型。
     类和结构体是很相似的,区别就是:结构体不支持继承,不支持定义构造器。
     */
    
    //类
    /*
     [修饰符]class 类名{
     0到多个构造器//初始化方法
     0到多个属性
     0到多个方法
     0到多个下标
     }
     修饰符可以是 private public internal final
     */
    /*
     定义结构体的语法
     [修饰符]struct 结构体名{
     
     }
     修饰符可以是 private public internal final
     */
    
    /*
     存储属性的语法
     [修饰符]var 或者 let 存储属性名:类型名字 = 初始值
     */
    
    /*
     定义构造器的语法
     [修饰符] init(形参列表){
     0到多行可执行语句组成的构造器执行体
     }
     */
    
    /*
     定义方法的语法
     [修饰符]func 方法名(形参列表)-> 返回值类型 {
     //0到多行可执行语句
     }
     */
    
    //定义一个person类
    class person {
        var name : String = "jack"
        var age : Int = 0
        func say (content: String){
            print(content)
        }
    }
    
    struct dog {
        var name : String
        var age : Int
        func run(){
            print("")
        }
    }
    
    //创建person类的实例,它是引用类型
    var p: person
    p = person()//var p = person(),p只是一个引用变量,并没有包含响应的属性数据
    print(p.name)
    p.say(content: "hello swift")
    
    //创建结构体的实例,它是值类型
    var dog1 = dog(name: "玩彩", age: 12)
    print(dog1.name)
    
    //内存中的对像可以有多个引用,即多个引用变量指向同一个对象
    var p2 = p
    p2.name = "rose"
    print(p.name)
    
    //值类型,创建dog实例时,这个变量就存储了dog实例;
    //若是把dog实例赋给另外一个变量,系统会将dog实例进行复制,不会影响原有的变量
    var dog2 = dog1
    dog2.name = "snoppy"
    print(dog2.name)
    print(dog1.name)
    

    如何选择类和结构体

    /*
     了解引用类型的比较
     self关键字的使用
     类和结构体的选择
     */
    
    //引用类型的比较
    class user {
        var name : String
        var age : Int
        init (name :String , age : Int){
            self.name = name
            self.age = age
        }
    }
    
    var u1 = user(name : "han",age: 32)
    var u2 = user(name : "han",age: 32)
    
    //通过运算符比较是否指向同一个类型的实例,返回Bool变量
    print(u1 === u2)
    print(u1 !== u2)
    
    var u3 = u1
    print(u3 === u1)
    
    //self关键词
    /*
     1.构造器中的self代表该构造器正在初始化的实例
     2.方法中的self代表该方法的调用者
     */
    class dog {
        func jump(){
            print("正在执行jump方法")
        }
        func run(){
            self.jump()
            print("正在执行run")
        }
    }
    
    class person {
        var name : String = ""
        var age : Int = 2
        //显示定义带参数的构造器
        init(name: String, age : Int){
            self.name = name
            self.age = age
        }
        
        //定义一个info方法
        func info (){
            print("\(name),\(age)")
        }
    }
    
    var person1 = person(name: "lily", age: 12)
    person1.info()
    

    相关文章

      网友评论

        本文标题:swift面相对象的基础<一>

        本文链接:https://www.haomeiwen.com/subject/ddvwpttx.html