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

Swift 接口和扩展(Protocol&Extension)

发布时间:2020-12-14 06:25:01 所属栏目:百科 来源:网络整理
导读:开发经常用到这两个,从实现的角度来讲他们的功能吧! protocol protocol ExampleProtocol { var simpleDescription: String { get } mutating func adjust()} 类、枚举和结构体都可以实现接口。 先看一下类: class SimpleClass: ExampleProtocol { var sim

开发经常用到这两个,从实现的角度来讲他们的功能吧!

protocol

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

类、枚举和结构体都可以实现接口。

先看一下类:

class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class."
    var anotherProperty: Int = 69105
    func adjust() {
        simpleDescription += " Now 100% adjusted."
    }
}

var oneSimp = SimpleClass()
oneSimp.adjust()

再看一下结构体:
struct SimpleStructure: ExampleProtocol {
    var simpleDescription: String = " struct"
    mutating func adjust() {
        simpleDescription += "(adjusted)"
    }
}
var oneStruct = SimpleStructure()
oneStruct.adjust()

枚举也可以的:

enum SimpleEnum: ExampleProtocol {
    case first(String),second(String)
    var simpleDescription: String {
        get {
            switch self {
            case .first("first"):
                return "first"
            default:
                return "second"
            }
        }
        set {
            switch self {
            case .first("first"):
                self = .first(newValue)
            default:
                self = .second(newValue)
            }
        }
    }
    mutating func adjust() {
        switch self {
        case .first:
            self = .first("1" + "first")
        default:
            self = .second("2" + "second")
        }
    }
}

var oneEnum = SimpleEnum.first("lv")
oneEnum.adjust()
Extesion:

使用 extension 来为现有的类型添加功能,比如添加一个计算属性的方法。你可以使用扩展

来给任意类型添加协议,甚至是你从外部库或者框架中导入的类型。

extension Int: ExampleProtocol {
    var simpleDescription: String{
        return "Int"
    }
    mutating func adjust() {
        self += 10
    }
}

使用起来特别方便,好好学习吧,加油!

如果转载请注明转于:AirZilong的博客

(编辑:李大同)

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

    推荐文章
      热点阅读