微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

接口和扩展

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


import UIKit


//使用 protocol 来声明一个接口。

protocol ExampleProtocol {

var simpleDescription: String { get }

mutating func adjust()

}

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

class SimpleClass: ExampleProtocol {

String = "A very simple class."

var anotherProperty: Int = 120

func adjust() {

simpleDescription += " Now 100% adjust."

}

func add() {

simpleDescription += " Now 50% add."

}

}

var a = SimpleClass()

a.adjust()

let aDescription = a.simpleDescription


struct SimpleStructure: ExampleProtocol {

String = "A aimple structure"

func adjust() {

simpleDescription += " (adjusted)"

}

}

var b = SimpleStructure()

b.adjust()

let bDescription = b.simpleDescription


enum SimpleEnum: ExampleProtocol {

case First(String),Second(String),Third(String)

String {

get{

switch self {

case let .First(text):

return text

let .Second(text):

let .Third(text):

default:

return "get error"

}

}

set {

self = .First(newValue)

self = .Second(newValue)

self = .Third(newValue)

}

}

}

func adjust() {

self {

let .First(text):

self = .First(text + " (first case adjust)")

let .Second(text):

self = .Second(text + " (Second case adjust)")

let .Third(text):

self = .Third(text + " (Third case adjust)")

}

}

}

var c = SimpleEnum.First("FirstVal")

c.simpleDescription

c.adjust()

c.simpleDescription

var d = SimpleEnum.Second("Hello")

var text = d.simpleDescription

d.simpleDescription = "Word"

text = d.simpleDescription

d.adjust()

text = d.simpleDescription

//注意声明 SimpleStructure 时候 mutating 关键字用来标记一个修改结构体的方法SimpleClass 的声明不需要标记 任何方法因为类中的方法经常会修改类。


//使用 extension 来为现有的类型添加功能,比如添加一个计算属性方法。你可以使用扩展来给任意类型添加协议,甚至是你从外部库或者框架中导入的类型。

extension Int: ExampleProtocol {

String {

return "The number \(self)"

}

self += 42

}

}

//你可以像使用其他命名类型一样使用接口名——例如,创建一个有不同类型但是都实现一个接口的对象集合。当你处理 类型是接口的值时,接口外定义的方法不可用。

let protocolValue: ExampleProtocol = a

protocolValue.simpleDescription

//即使 protocolValue 变量运用时的类型是 simpleClass,编译器会把它的类型当做 ExampleProtocol。这表示你不能调用类在它实现的接口之外实现的方法或者属性

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐