iOS經典講解之Swift枚舉(Enum)、協議(protocol)、擴展(Extension)

作者:Loving_iOS

轉載請標明出處:http://blog.csdn.net/loving_ios/article/details/49406865

本次開發環境爲Xcode7.0.1 創建playground文件 進行的代碼編寫。

//**********************枚舉**************************

//enum 枚舉名:類型 {
//    
//    case 分支1 = 賦值1
//    case 分支2 = 賦值2
//    
//}

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

// 類
class Person {
    
    var indeitity:PersonIndetity
    var name:String
    var age:String
    
    // 類的構造器
    init(name:String, age:String, idd:PersonIndetity) {
        self.indeitity = idd
        self.name = name
        self.age = age
    }
    
    func hello() {
        print("hello")
    }
    // 類方法
    class func hello2() {
        
    }
    
}

// 枚舉 枚舉名.類型 其中枚舉名可以省略
var person = Person(name: "Tom", age: "30", idd: PersonIndetity.Student)

// 枚舉值得獲取
// 獲取當前分支
person.indeitity.hashValue
// 獲得分區的值
person.indeitity.rawValue

// 繼承 類名:父類名

class Student:Person {
    
    // 子類的屬性
    var classNumber:Int = 23
    init(name: String, age: String, idd: PersonIndetity, classNumber:Int) {
        
        // 如果屬性僅指定類型 需要在super.init之前進行賦值操作
        super.init(name: name, age: age, idd: idd)
        self.classNumber = classNumber
        
    }
    
    // 重寫父類方法 需要使用override關鍵字
    override func hello() {
        
    }
  override class func hello2() {
    
    }
    
}

// 協議
protocol OneProtocol {
    
    func typeFunc()
    static func typeFunc2()
    mutating func typeFunc3()
    
}

// 類和結構體實現協議方法的時候 需要根據本身的語法規則做出調整

class newStudent:OneProtocol {
    
    func typeFunc() {
        
    }
    class func typeFunc2() {
        
    }
    
   func typeFunc3() {
        
    }
}


struct VideoNew:OneProtocol {
    
    func typeFunc() {
        
    }
    static func typeFunc2() {
        
    }
   mutating func typeFunc3() {
        
    }
}

// 類同時繼承父類和協議的時候 父類必須寫在前面
//class StudentNew:Person, OneProtocol {
//    
//}

@objc protocol SecondProtocol {
    optional func hello()
}

// 注意:當協議中方法使用optional 聲明可選方法時 協議必須聲明成@objc 此時的協議爲類協議 不能被結構體繼承


// 擴展
var value:String = ""
extension Person {
    
    func helloworld() {
        
    }
    
    // 如果想擴展屬性 只能是計算屬性
    var stu:String {
        get{
            
            return value
        }
        set {
            value = newValue
        }
    }
    
    // 擴展構造器需要使用convenience
    convenience init(name:String, age:String, idd:PersonIndetity, stu:String) {
        self.init(name:name, age:age, idd:idd)
        self.stu = stu
    }
}

var person_one = Person(name: "Tom", age: "20", idd: PersonIndetity.Student, stu: "帥哥")
person_one.stu
person_one.stu = "靚妹"
person_one.stu

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章