//: Playground - noun: a place where people can play
import UIKit
//枚举
//enum 枚举名: 类型{
// case 分支名1 = 赋值1
// case 分支名2 = 赋值2
//}
enum PersonIndentity : String{
case Teacher = “Teacher_id”
case Student = “Student_id”
}
//类
class Person {
var indentity : PersonIndentity?
var name: String?
var sex: String
//类的构造器
init (name:String, sex:String, idd:PersonIndentity){
self.name = name
self.sex = sex
self.indentity = idd
}
//方法
func hello() {
println("hello \(self.name)")
}
class func hello2() {
println("hello word")
}
//类型属性 只能是计算属性
class var home: String {
get{
return "地球"
}
}
}
//使用枚举时, 枚举名.类型
//也可以进行简化 .类型
//var student = Person(name: “dj”, sex: “f”, idd: PersonIndentity.Student)
var student = Person(name: “dj”, sex: “f”, idd: .Student)
//枚举值的获得
//代表枚举分支的行
student.indentity?.hashValue
//代表枚举分支具体的值
student.indentity?.rawValue
student.hello()
Person.hello2()
Person.home
//继承
class Student: Person {
var classNumber: Int
init(name: String, sex: String, idd: PersonIndentity, classNumber: Int) {
//子类的特有属性要在super.init前面进行赋值
self.classNumber = classNumber
super.init(name: name, sex: sex, idd: idd)
}
func helloStudent () {
println("子类方法")
}
//重写父类方法 需要使用override关键字
override func hello() {
println("重写父类方法")
}
override class func hello2() {
println("重写父类类型方法")
}
}
//协议
protocol OneProtocol {
func typeFunc()
static func typeFunc2()
// class func typeFunc3()
mutating func typeFunc4()
}
//继承协议,实现方法的时候,要根据结构体或类本身的语法做出调整,不能仅依靠提示
struct StructNew : OneProtocol {
func typeFunc() {
}
static func typeFunc2() {
}
func typeFunc4() {
}
}
class ClassNew: OneProtocol{
func typeFunc() {
}
class func typeFunc2() {
}
func typeFunc4() {
}
}
//若想实现方法可选实现,需要使用optional关键字,optional关键字实现条件是必须是@objc的协议, eg:@objc protocol
//但此时 协议不能被结构体继承
@objc protocol TwoProtocol{
optional func typeFunc3()
}
//struct StrucNew2: TwoProtocol {
//
//}
//如果同时继承协议和父类,父类需要写在前面
class ClassNew2:ClassNew, TwoProtocol{
}
//延展
var studentEX = “stu”
extension Person {
func hello5(){
}
//延展不能添加存储属性,只能添加计算属性
//var stu2: String = "jhhkk"
var stu2 :String {
get{
return studentEX
}
set{
studentEX = newValue
}
}
//convenience 扩展类的构造器的时候,涂药添加关键字
convenience init(name:String, sex:String, idd:PersonIndentity, stu:String) {
self.init(name:name, sex: sex, idd: idd)
self.stu2 = stu
}
}
var person = Person(name: “hj”, sex: “f”, idd: PersonIndentity.Student, stu: “djj”)
person.stu2 = “ggg”
person.stu2