接口和扩展
来源:互联网 发布:个人业务介绍源码 编辑:程序博客网 时间:2024/05/22 01:31
//: Playground - noun: a place where people can play
import UIKit
//使用 protocol 来声明一个接口。
protocol ExampleProtocol {
var simpleDescription:String { get }
mutating func adjust()
}
//类、枚举和结构体都可以实现接口。
class SimpleClass:ExampleProtocol {
var simpleDescription: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 {
var simpleDescription:String = "A aimple structure"
mutating func adjust() {
simpleDescription +=" (adjusted)"
}
}
var b =SimpleStructure()
b.adjust()
let bDescription =b.simpleDescription
enum SimpleEnum:ExampleProtocol {
case First(String), Second(String), Third(String)
var simpleDescription:String {
get{
switch self {
case let .First(text):
return text
case let .Second(text):
return text
case let .Third(text):
return text
default:
return "get error"
}
}
set {
switch self {
case let .First(text):
self = .First(newValue)
case let .Second(text):
self = .Second(newValue)
case let .Third(text):
self = .Third(newValue)
}
}
}
mutating func adjust() {
switch self {
case let .First(text):
self = .First(text +" (first case adjust)")
case let .Second(text):
self = .Second(text +" (Second case adjust)")
case 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来为现有的类型添加功能,比如添加一个计算属性的方法。你可以使用扩展来给任意类型添加协议,甚至是你从外部库或者框架中导入的类型。
extensionInt:ExampleProtocol {
var simpleDescription:String {
return"The number \(self)"
}
mutating func adjust() {
self += 42
}
}
//你可以像使用其他命名类型一样使用接口名——例如,创建一个有不同类型但是都实现一个接口的对象集合。当你处理类型是接口的值时,接口外定义的方法不可用。
let protocolValue:ExampleProtocol =a
protocolValue.simpleDescription
//即使 protocolValue变量运用时的类型是 simpleClass,编译器会把它的类型当做 ExampleProtocol。这表示你不能调用类在它实现的接口之外实现的方法或者属性。
- 扩展和组合接口
- 接口和扩展
- Swift接口和扩展
- Swift接口和扩展
- 实现Runnable接口和扩展Thread类
- hibernate 核心接口和可扩展点
- PWP 扩展库接口和源码, ext_lib_src
- 扩展接口
- 扩展接口
- Windows CE .NET 和可扩展固件接口 (EFI)
- Windows CE .NET 和可扩展固件接口 (EFI)
- 十七、对 一类物件 和 接口文件 进行扩展
- 实现Runnable接口和扩展Thread使用场景
- php扩展开发笔记(8)继承和实现接口
- Swift2.2 学习笔记(六) ___接口和扩展
- SmartFoxServer 2x HTTP接口请求和扩展集成
- 智能小车十三《扩展开关和充电接口》
- 使用嵌套类来清晰化类接口,分离扩展操作和扩展查询。
- Android中apk动态加载技术研究(2)android插件化及实现
- 常用的网络排查问题命令
- 不算“真正的语言”?详说Swift 2.0中的错误处理
- handler传递
- 嵌入式Linux启动过程中的问题积累
- 接口和扩展
- 黑帽SEO
- 谷歌Volley网络框架讲解——网络枢纽
- Android Percent Layout 安卓百分比布局
- Ryu基本操作的REST API调用示例
- android 项目R.java文件缺失导致编译错误
- VMware、RHEL的网络配置
- AppDelegate中几个惯用的回调调用时机
- CocoaPods pod install/pod update更新慢的问题