swift3 协议

//: Playground - noun: a place where people can play
import UIKit

var str = "Hello, playground"
class Person {
    
    let name: String
    init(name: String) { self.name = name }
    var classes: Classess?
    
    deinit { print("\(name) is being deinitialized") }
}

class Classess {
    
    let no: String
    init(no: String) { self.no = no }
    weak var member: Person?
    
    deinit { print("Apartment \(no) is being deinitialized") }
}

let p1 = Person.init(name: "zhanshan")
let c1 = Classess.init(no: "111")

p1.classes = c1
c1.member = p1

print(p1.classes ?? "")
print(c1.member ?? "")
extension Double {
    
    var km:Double { return self*888}
}

let d1:Double = 2
d1.km

//
protocol SomeProtocol {
    
    var value1: String { get set }
    var value2: String { get }
    static var value3:String { get }
    
    //异变方法
    mutating func getName()
}
//
protocol TwoProtocol {
    
}
//多承载
protocol AllProtocol: SomeProtocol, TwoProtocol {
    
    //定义属性别名
    associatedtype DefineType
    var weight:DefineType { get }
}

//结构体继承协议
struct Toprotocol:SomeProtocol {
    
    mutating internal func getName() {
        
        self.value1 = "edit"
    }

    internal var value1: String
    internal var value2: String
    internal static var value3: String = "value3"
    var value4:String
    
}

var struct1 = Toprotocol.init(value1: "value1", value2: "value2", value4: "value4")

var struct2:Toprotocol = struct1
struct2.value2 = "2"

//定义别名类型
struct MobilePhone:AllProtocol {
    
    typealias DefineType = Double
    
    internal var weight: Double
    mutating internal func getName() {
        value2 = "changed"
    }

    internal static var value3: String = ""

    internal var value2: String
    internal var value1: String

    
}

let mobile1 = MobilePhone.DefineType()
var mobile2 = MobilePhone.init(weight: 25, value2: "value2", value1: "value1")
mobile2.getName()

//Swift标准库协议


//1, 比较相关的协议
struct Student1:Equatable {
    
    var math:Int
    var english:Int

    static func == (lhs: Student1, rhs: Student1) -> Bool {
        
        return lhs.english == rhs.english && lhs.math == rhs.math
    }
}
//Student遵守Equatable
let s1 = Student1.init(math: 20, english: 30)
let s2 = Student1.init(math: 20, english: 40)
let isTrue1  = s1 == s2

//2, 自定义比较协议
public protocol ZZNCompareable {
   
   static func < (lhs:Self,rhs:Self) ->Bool
}

struct Student2:ZZNCompareable {
    
    var studentName1:String
    var studentName2:String

    //重载 < 运算符
    static func < (lhs:Student2,rhs:Student2) ->Bool {
    
        return lhs.studentName1 == rhs.studentName2
    }
    
    //重载 <= 运算符
    static func <= (lhs:Student2,rhs:Student2) ->Bool {
        
        return lhs.studentName1 == rhs.studentName2
    }
    
    //重载 > 运算符
    static func > (lhs:Student2,rhs:Student2) ->Bool {
        
        return lhs.studentName1 == rhs.studentName2
    }
    //重载 >= 运算符
    static func >= (lhs:Student2,rhs:Student2) ->Bool {
        
        return lhs.studentName1 == rhs.studentName2
    }
}

let ss2 = Student2.init(studentName1: "zz", studentName2: "zz")
let ss22 = Student2.init(studentName1: "zz", studentName2: "zw")
ss2 < ss22

//
struct Student3: Comparable {
    
    var math: Int
    var english: Int
    
    //重载 < 运算符
    static func < (lhs:Student3,rhs:Student3) ->Bool {
        
        return (lhs.math + lhs.english) < (rhs.math + rhs.english)
    }
    
    //重载 <= 运算符
    static func <= (lhs:Student3,rhs:Student3) ->Bool {
        
        return (lhs.math + lhs.english) <= (rhs.math + rhs.english)
    }
    
    //重载 > 运算符
    static func > (lhs:Student3,rhs:Student3) ->Bool {
        
        return (lhs.math + lhs.english) > (rhs.math + rhs.english)
    }
    //重载 >= 运算符
    static func >= (lhs:Student3,rhs:Student3) ->Bool {
        
        return (lhs.math + lhs.english) >= (rhs.math + rhs.english)
    }
    //重载 == 运算符
    static func == (lhs:Student3,rhs:Student3) ->Bool {
        
        return (lhs.math + lhs.english) == (rhs.math + rhs.english)
    }
    

}

let s3_left = Student3(math: 80, english: 60)
let s3_right = Student3(math: 70, english: 90)
s3_left > s3_right

//-----
//枚举继承协议
protocol NetServiceProtocol {
    
    var netName:String { get }//只需实现get
    mutating func change()//外部修改enum 枚举值
}

enum NetServiceType:NetServiceProtocol {
    
    case union(String)
    case mobile(String)
    case telecom(String)
    
    mutating func change() {
        
        self = .mobile("mobile")

    }

    var netName: String {
        
        get {
            
            return NetServiceType.mobile("mobile").netName
        }
    }

}




©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容