Swift开发第十二篇——protocol组合&static和class
本篇分为两部分:
一、Swift 中 protocol 组合的使用
二、Swfit 中 static和class 的使用
一、Swift 中 protocol 组合的使用
在 Swift 中我们可以使用 Any 来表示任意类型(public typealias Any = protocol<>),是一个 protocol<>的同名类型,需要实现空接口的接口,其实就是任意类型的意思。
protocol<ProtocolA, ProtocolB, ProtocolC> 等价于
protocol ProtocolD: ProtocolA, ProtocolB, ProtocolC {
//...
}
protocol 组合可以用 typealias 来命名的,于是上面的 ProtocolD 协议可以替换为
typealias ProtocolAll = protocol<ProtocolA, ProtocolB, ProtocolC>
如果某些接口我们只用一次的话,可以直接匿名化
struct ProtocolStruct {
static func test1(pro: protocol<ProtocolA, ProtocolB>) {
//...
}
static func test2(pro: protocol<ProtocolB, ProtocolC>) {
//...
}
}
如果实现多个接口时接口内的方法冲突的话只要在调用前进行类型转换就可以了
protocol A {
func wang() -> Int
}
protocol B {
func wang() -> String
}
class AnClass: A, B {
func wang() -> Int {
return
}
func wang() -> String {
return "强转"
}
}
let instance = AnClass()
let num = (instance as A).wang()
let str = (instance as B).wang()
二、Swfit 中 static和class 的使用
在 Swift1.2及以后,我们可以在 class 中使用 static 来声明一个类作用域的变量:
class MyClass {
static var bar: AnClass?
}
这种写法是合法的,有了这个特性之后,像单例的写法就很简单了
protocol MyProtocol {
static func foo() -> String
}
struct MyStruct: MyProtocol {
static func foo() -> String {
return "MyStruct"
}
}
enum MyEnum: MyProtocol {
static func foo() -> String {
return "MyEnum"
}
}
class TestClass: MyProtocol {
// 在 class 中可以使用 class
class func foo() -> String {
return "TestClass.foo()"
}
// 也可以使用 static
static func bar() -> String {
return "AnClass.bar()"
}
}
protocl 是比较特殊的,在 Swift 中 class, struct 和 enum 都是可以实现某个 protocol 的,这时候我们就会不知道在什么情况下使用 static,什么情况下使用 class。在 Swift2.0 之后,只要记住在任何时候使用 static 都是没有问题的。
Swift开发第十二篇——protocol组合&static和class的更多相关文章
- PowerBI开发 第十二篇:钻取
钻取是指沿着层次结构(维度的层次)查看数据,钻取可以变换分析数据的粒度.钻取分为下钻(Drill-down)和上钻(Drill-up),上钻是沿着数据的维度结构向上聚合数据,在更大的粒度上查看数据的统 ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
- 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探
SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...
- 解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译)
解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译) http://improve.dk/orcamdf-row-compression-support/ 在这两个月的断断续续的开发 ...
- 第十二篇 SQL Server代理多服务器管理
本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...
- 第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- Python之路【第十二篇】:JavaScrpt -暂无内容-待更新
Python之路[第十二篇]:JavaScrpt -暂无内容-待更新
- 【译】第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- 【译】第十二篇 SQL Server代理多服务器管理
本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...
随机推荐
- T-SQL 查询出某个列总值大于X的数据
原文: https://www.lesg.cn/netdaima/sqlservert-sql/2016-459.html 今天操作查询的时候遇见一个这样的要求: 有一张表 用户ID 购买日期 购买金 ...
- 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换
[源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...
- 算法:求幂(python版)
分别用迭代方法和递归方法实现求幂迭代方法的时间复杂度为O(n),空间复杂度为O(1)递归方法1的时间复杂度为O(logn),空间复杂度为O(logn)递归方法2的时间复杂度为O(n),空间复杂度为O( ...
- yii2 advance 安装
1. 前提条件,php版本得> 5.4 D:\phpStudy>php -v PHP (cli) (built: Sep ::) Copyright (c) - The PHP Group ...
- Thinkphp各种方法知识图谱
A方法:用于实例化控制器 ThinkPHP函数详解:A方法 B方法:执行某个行为 I方法(其命名来自于英文Input):获取输入参数 支持过滤和默认值 ThinkPHP函数详解:I方法 D方法:D函数 ...
- php函数的传值如果需要引用传递注意的细节
Strict standards: Only variables should be passed by reference 网上查到资料有这么一句话: 在php5.3以上版本会出这个问题,应该也和p ...
- C# Excel处理工具
需求:选择一个Excel文件,然后对该Excel文件进行处理,再导出一个处理后的Excel文件. 效果图 声明:我对winform开发不熟,但是我看到许多开发人员做东西只管交差,从不考虑用户体验,也不 ...
- Hibernate入门案例配置以及增、删、改、查看
享受痛苦就是走向成功的第一步. 一.创建一个项目(lib里面是需要的夹包小奶瓶要导包) 二.书写大配置文件 大配置文件必须放置在项目根目录(专业classpath下):界定:就是src 1名称:hib ...
- 使用 WSO2 API Manager 管理 Rest API
WSO2 API Manager 简介 随着软件工程的增多,越来越多的软件提供各种不同格式.不同定义的 Rest API 作为资源共享,而由于这些 API 资源的异构性,很难对其进行复用.WSO2 A ...
- http gzip 解压缩
var sContentEncoding = httpRespone.Headers["Content-Encoding"]; if(sContentEncoding == &qu ...