加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift高级开发语言--枚举,继承,协议,扩展

发布时间:2020-12-14 01:42:29 所属栏目:百科 来源:网络整理
导读:枚举 //enum 枚举名: 类型{ // case 分支1 = 赋值1 // case 分支2 = 赋值2 //} enum PersonIndenttity: String { case Teacher = "Teacher_id" case Student = "Student_id" } // 类 class Person { var indentity:PersonIndenttity ? var name: String ? va

枚举

//enum 枚举名: 类型{
// case 分支1 = 赋值1
// case 分支2 = 赋值2
//}

enum PersonIndenttity:String {
    case Teacher = "Teacher_id"
    case Student = "Student_id"
}


// 类
class Person {
    var indentity:PersonIndenttity?
    var name:String?
    var age:String

    // 类的构造器
    init (name:String,age:String,idd:PersonIndenttity) {
        self.name = name
        self.age = age
        self.indentity = idd
    }

    func hello() {
        print("hello")
    }

    // 类型fangfa
    class func hello2() {

    }
}
// 枚举 枚举名.类型
// 枚举名可以省略
var person = Person(name: "毛毛",age: "80",idd: PersonIndenttity.Student)
//枚举值的获取
// 获取当前分支
person.indentity?.hashValue
// 获取分支的值
person.indentity?.rawValue

继承

//继承 类名:父类名
class Student:Person{
    var classNumber: Int = 23
    init(name: String,age: String,idd: PersonIndenttity,classNum:Int) {
        // 如果属性仅仅指定类型,需要在super.init前进行赋值操作
        self.classNumber = classNum
        super.init(name: name,age: age,idd: idd)

    }
    // 重写父类方法,需要使用override关键字
    override func hello() {

    }

   override class func hello2() {

    }

}

协议

// 协议
protocol OneProtocol {
    func typeFunc()
    static func typeFunc2()
    mutating func typeFunc3()

}

// 类和结构体实现协议方法的时候,需要根据本身的语法规则做出调整
class StudentNew:OneProtocol {
    func typeFunc() {

    }
   class func typeFunc2() {

    }
    func typeFunc3() {

    }
}


struct VideoNew:OneProtocol {
    func typeFunc() {

    }
   static func typeFunc2() {

    }
    mutating func typeFunc3() {

    }
}

// 类同时继承父类和协议的时候,父类必须写在前面
//class StudentNew2:Person,OneProtocol {
// 
//}

@objc protocol TwoProtocol {
    optional func byebye()
}

// 当协议中方法使用 optional声明可选时,协议必须生命成@objc,此时,协议为类协议:class protocol
// 并且不能被结构体继承
//struct struct2:TwoProtocol {
// 
//}

扩展

// 扩展
var value :String = ""
extension Person {
    func hello5() {

    }
    // 如果想扩展属性,只能是计算属性
    var stu2:String {
        get {
            return value
        }
        set {
            value = newValue
        }
    }
    // 扩展构造器的时候需要使用connvenience
    convenience init (name:String,idd:PersonIndenttity,stu2:String){
        self.init(name:name,age:age,idd:idd)
        self.stu2 = stu2
    }
}
var person11 = Person(name: "毛毛",idd: .Student,stu2: "傻逼")
person11.stu2
person11.stu2 = "二笔"
person11.stu2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读