Swift协议中类继承协议的mutating问题
之前实际开发的时候遇到的一个小问题,网上也没有找到相关说明。本来当时弄明白了想着记下来的,但是比较忙就耽搁了,趁今天休息记录一下。
protocol Test:
CustomStringConvertible {
var num1: Int {
get set }
var num2: Int {
get set }
func getSum() -> Int
func sum()
//num1 变为num1+num2
}
extension Test
{//文字输出num1
var
description: String {
return
"\(num1)"
}
}
extension Test {
func getSum() -> Int
{
return num1
+ num2
}
mutating func sum() {
//改变自身的变量,要加mutating
num1 +=
num2
}
}
playground没有报错,说明这个协议没问题。但是我们来试一下让class继承这个看似没有问题的协议
class TestClass: Test
{
var num1: Int
var num2: Int
init() {
num1 =
0; num2 =
0
}
convenience
init(_ num1:
Int, _ num2:
Int) {
self.init()
self.num1 =
num1; self.num2
= num2
}
}
结果编译器报错,Type 'TestClass' does not conform to protocol 'Test'
到底哪里出问题了?仔细一想,对于类而言mutating是不需要的,这是枚举型和结构体里改变自身变量的方法才需要前置的关键词。
最后个人的解决方案就是声明这个协议只有类可以继承,这样就可以删掉mutating了
protocol Test:
class,
CustomStringConvertible {
var num1: Int {
get set }
var num2: Int {
get set }
func getSum() -> Int
func sum() //num1
变为num1+num2
}
extension Test
{//文字输出num1
var
description: String {
return
"\(num1)"
}
}
extension Test {
func getSum() -> Int
{
return num1
+ num2
}
func sum() {
//改变自身的变量,要加mutating
self.num1 +=
self.num2
}
}
class TestClass: Test
{
var num1: Int
var num2: Int
init() {
num1 =
0; num2 =
0
}
convenience
init(_ num1:
Int, _ num2:
Int) {
self.init()
self.num1 =
num1; self.num2
= num2
}
}
然后测试一下
var test =
TestClass(1,
2)
print(test)
test.sum()
print(test)
运行结果如下
1
3
最新文章
- Hibernate使用
- .NET 创建Windows服务,及服务的安装卸载
- Python基础学习笔记(七)常用元组内置函数
- 洛谷P2723 丑数 Humble Numbers
- git 删除远程主分支及其它操作
- office2010安装出错,windows installer服务不能更新一个或多个受保护的windows文件
- Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作
- linux重要目录说明
- 学习笔记——Java字符串操作常用方法
- 记一次尴尬的git reset丢失分支故障
- java代码实现ftp服务器的文件上传和下载
- 为什么ssh 执行完命令以后 挂了, hang , stop respond
- python grib气象数据可视化
- 面象对象设计原则之六:迪米特原则(LeastKnowledge Principle, LKP)
- SQL Server连接错误1326
- PAT 乙级 1047 编程团体赛(20) C++版
- stylus-loader (copy)
- j.u.c系列(04)---之AQS:同步状态的获取与释放
- jQuery 检查某个元素在页面上是否存在实例代码
- google::proto::message.h
热门文章
- poj 3233 Matrix Power Series(矩阵二分,高速幂)
- android启动另一应用
- 【BZOJ1414/3705】[ZJOI2009]对称的正方形 二分+hash
- 【BZOJ3052】[wc2013]糖果公园 带修改的树上莫队
- Flow 的工作方式 类型检查
- 对于js里的闭包的理解
- npm ERR! Unexpected end of JSON input while parsing near '...inimist";:";^1.2.0";}
- 20170313 ABAP程序未激活状态下保存或激活进入debug
- iOS信号量
- UIView封装动画--iOS 利用系统提供方法来做弹性运动