Swift3.0 - 扩展


  • 给存在的类型增加扩展

a.我们演示一个简单的例子 先定义一个协议

protocol Custom {
    var describe:String{get}
}

通过扩展的方式,让Int 实现协议

extension Int:Custom{
    var describe:String{
        return String(self)
    }
}
  • 高级用法

a.需求: 给Array 扩展一个属性,但是只能让元素为Int 时才能使用

思路:承接上文,我们给Int 遵守了一个协议Custom ,我们就借助这个来实现需求

extension Array  where Element : Custom {
    var  lastValue: Element{
       return self[count-1]
}
}
// 使用
let nums = [1,2,3,4,5]
print(nums.lastValue)

运行结果:

5

b.如果想要在定义协议的时候,不指定变量名称,在实现协议的时候,再去设定变量类型,应该怎么写?

定义一个协议

  protocol Draw{
        associatedtype CompatableType  // 自定义定义一个变量名字
        var name:CompatableType{get}
  }

如何继承协议

class Person:Draw{
    typealias CompatableType = String // 给自定义变量名指定变量,即实现
    var name:String{
        return "人"
    }
}

当然由于Swift 有类型推断能力,可以像下面这样写

class Person:Draw{
    var name:String{
        return "人"
    }
}

你不能干的事情

  • 不能给对象扩展存储属性

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

java基础学习_反射、装饰模式、JDK新特性_day27总结

10520
来自专栏散尽浮华

python-基础案例

范例一: 练习:元素分类 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,...

30150
来自专栏Android机动车

java内部存储简述

在实际项目中,会涉及到很多大量数据的访问,存储或者是计算,这个时候如果可以用合适的容器来存储这些数据,就会达到事半功倍的效果,也就是说,当你的程序遇到瓶颈的时候...

15230
来自专栏运维技术迷

Python时间与时间戳转换

python的datetime转换为UNIX时间戳 #导入time模块(用于转换时间戳) In [1]: import time   # 导入datetime模...

39250
来自专栏小樱的经验随笔

UVa 11461 - Square Numbers【数学,暴力】

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=...

32950
来自专栏数据结构与算法

1750:全排列

1750:全排列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所...

382140
来自专栏积累沉淀

Java类加载原理机制

1.类的加载过程 JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示: ? 1...

304100
来自专栏余林丰

初识Java反射

要详细的了解Java反射,就得要了解Java的类加载以及何为运行时动态加载等等概念。本文抛开其余概念,简单介绍Java反射,详细介绍会在以后有一个系统而全面的认...

283100
来自专栏Golang语言社区

Go语言的小细节--map

Go和Python一样,都有map。在Python里叫做字典,在Go里叫做映射。 与Go相比Python对map的使用相对更加灵活,毕竟在Pyhton的哲学里一...

36750
来自专栏Java技术栈

一张图搞清楚Java异常机制

下面是Java异常类的组织结构,红色区域的异常类表示是程序需要显示捕捉或者抛出的。 ? Throwable Throwable是Java异常的顶级类,所有的异常...

30250

扫码关注云+社区

领取腾讯云代金券