swift3 协议 使用类、结构体、枚举来实现

在对协议进行声明和子类的实现之前,先聊一下声明协议属性的get和set还有子类可能会用到的mutating

1、get和set

在协议中声明属性则需要设置对应的get或者set方法

var simpleDesc: String {get}

上述则说明了子类对于simpleDesc的实现至少是get方法

var simpleDesc: String {get set}

上述则说明了子类对于simpleDesc的实现需要get和set方法

2、mutating

正常在协议中声明的时候无需指定mutating或者nonmutating,但是如果子类是结构体或者枚举而不是class,并且该函数会修改结构体中的参数则需要使用mutating,明确不能修改则使用nonmutating

 

一、协议声明

protocol ExampleProtocol {
    var simpleDesc: String {get}
    mutating func adjust()
}

 

二、类继承

class SimpleClass: ExampleProtocol {
    var simpleDesc: String = "A very simpleclass"
    
    func adjust() {
        simpleDesc += " not adjust"
    }
}
let sc = SimpleClass()
sc.simpleDesc = "sdfsdf"
sc.adjust()
print(sc.simpleDesc)

这里使用let的方式,但是依旧能够对simpleDesc和adjust进行复制和调用

 

三、结构体继承

struct SimpleStruct: ExampleProtocol {
    var simpleDesc: String = "SimpleStruct"
    
     mutating func adjust() {
        simpleDesc += " not adjust"
    }
}

这里如果跟“二”一样使用let的方式,就会报错,提示"Cannot assign to property: 'ss' is a 'let' constant"

这里只能使用var的方式,并且mutating这个关键字要显示标识。

 

四、枚举继承

swift的枚举跟其他语言的枚举有不同的地方是:可以对case项指定传入参数,并且可以在枚举中定义属性和函数

复制代码
enum SimpleEnum: ExampleProtocol {
    case First(String), Second(String)
    var simpleDesc: String {
        get {
            switch self {
            case let .First(text):
                return text
            case let .Second(text):
                return text
            }
        }
    }
   
    mutating func adjust() {
        switch self {
        case let .First(text):
            self = .First(text + " adjust")
        case let .Second(text):
            self = .Second(text + " adjust")
        }
    }
}
复制代码

1、指定的属性,通过实现协议中指定的get或者set来对simpleDesc的读取

2、这里均使用了switch-case的方式累枚举所有enum里面的case

3、因为simpleDesc存储的参数是放在case传入的参数所以当要更新simpleDesc,则需要新建case;详见adjust()

var first = SimpleEnum.First("first")
print(first.simpleDesc)
first.adjust()
print(first.simpleDesc)

 

posted @   LCAC  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示