• Swift初体验(三)


    /*******************************************************************************/
    //  协议
    protocol Description{
        
        func description() -> String
        mutating func aMutatingMethod()
        class func aTypeMethod()
    //    func anOptionalMethod()
    }
    
    //  假设要声明可选择实现的方法,须要在func前加@optional声明,并且协议的前面须要加@objc声明,这种协议结构体不能遵守,所以也不同意mutating方法的存在
    //@objc protocol Description{
    //    
    //    func description() -> String
    ////    mutating func aMutatingMethod()
    //    class func aTypeMethod()
    //    @optional func anOptionalMethod()
    //}
    
    //  结构体
    struct Point{
        var x = 0.0
        var y = 0.0
    }
    
    struct Size{
        var width = 0.0
        var height = 0.0
    }
    
    var point = Point()
    var size = Size()
    
    var array = Array<String>()
    
    struct Rect{
        var origin = Point()
        var size   = Size()
        var center: Point{
        get{
            let centerX = origin.x + size.width / 2
            let centerY = origin.y + size.height / 2
            return Point(x:centerX , y:centerY)
        }
        set{
            //  set方法会提供一个默认的新值:newValue
            let originX = newValue.x - size.width / 2
            let originY = newValue.y - size.height / 2
            origin = Point(x:originX, y:originY)
        }
        }
        
        mutating func moveBy(deltaX:Double, deltaY:Double){
            let newX = origin.x + deltaX
            let newY = origin.y + deltaY
            origin = Point(x:newX, y:newY)
        }
        
        func description() -> String{
            return "((origin.x),(origin.y),(size.width),(size.height))"
        }
        
        mutating func aMutatingMethod(){
        
        }
        
        func anOptionalMethod(){
        
        }
        
        //  假设是实现协议中得类方法,尽管在协议中使用了classkeyword,可是在结构体或者枚举实现的时候依旧须要使用statickeyword
        static func aTypeMethod(){
        
        }
        
    }
    var frame = Rect()
    frame.origin.x = 10
    frame.origin.y = 10
    frame.size = Size(100,height:100)
    
    println("frame.center = ((frame.center.x), (frame.center.y))")
    
    frame.center = Point(x:100,y:100)
    println("frame.center = ((frame.center.x), (frame.center.y))")
    println("frame.origin = ((frame.origin.x), (frame.origin.y))")
    
    //  枚举
    enum PersonIdentify:String{
        case Teacher = "teacher"
        case Student = "student"
    }
    
    //  类
    class Person{
        var name: String?

    var sex: String?

    var identify: PersonIdentify? // 构造器中,第一个參数依旧会创建一个和局部參数名称同样的外部參数名称 init(name: String, sex: String, identify: PersonIdentify){ self.name = name; self.sex = sex; self.identify = identify } func description() -> String{ // 调用枚举值的toRaw()方法能够获取到枚举值的初值 return "name = (name) sex = (sex) course = (identify!.toRaw())" } // 在类中假设实现协议中定义的mutating方法,那么不须要加"mutating"keyword func aMutatingMethod(){ } class func aTypeMethod(){ } } var person1 = Person(name:"humingtao",sex:"m",identify:.Student) var person2 = Person(name:"kebi",sex:"m",identify:.Teacher) switch(person1.identify!){ case .Teacher: println("I am a teacher") case .Student: println("student") } class Student:Person{ var number: String? // 在类中,类型属性仅仅能够是计算属性,可是在枚举和结构体中,既能够是计算属性,也能够是存值属性 // 在类中,声明一个类型属性的keyword是class,在结构体和枚举中是static class var attendClassTime: String{ return "9:30" } init(name: String, sex: String, number: String){ super.init(name: name, sex: sex, identify: .Student) self.number = number } } var student1 = Student(name: "hmt",sex: "m",number: "12345678") class Teacher:Person{ var course: String? init(name: String, sex: String, course: String){ super.init(name: name, sex: sex, identify: .Teacher) self.course = course } override func description() -> String{ return super.description() + "" + "course = (course)" } } // 思考为什么加"?" class course{ var name: String? init(name: String){ self.name = name } }


  • 相关阅读:
    Java入门总结
    Java安装JDK
    ExcelPackage 读取、导出excel
    An error occurred while starting the application.
    EF core2.1+MySQL报错'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBuilder..ctor(Microsoft.EntityFrameworkCore.Storage.IRelationalTypeMapper)
    数据表转换类
    The requested URL /xxxx.html was not found on this server
    .htaccess: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
    B2B多商铺初期权限数据库设计
    数据库持久化比较
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5209449.html
Copyright © 2020-2023  润新知