我们如何在Swift中更改协议变量

时间:2016-09-01 08:29:00

标签: swift protocols

我有两个使用相同协议实现的课程

protocol MyProtocol{

}
class MyFirstClass : MyProtocol{
    var test : Int = 0
}
class MySecondClass : MyProtocol{
    var test : Int = 0
}

每次传递MyFirstClass或MySecondClass的对象时,我怎么能有一个增加测试变量的函数

类似这样的事情

var a = MyFirstClass()
var b = MySecondClass()

func inc(myObject : MyProtocol){
    myObject.test ++ // myObject has no member `test`
}

inc(a)
inc(a)
inc(b)
inc(a)

1 个答案:

答案 0 :(得分:3)

这是完整的Swift 3代码:

protocol MyProtocol: class {
   var test: Int { get set }
}

class MyFirstClass: MyProtocol {
    var test: Int = 0
}

class MySecondClass: MyProtocol {
    var test: Int = 0
}

func inc(_ obj: MyProtocol) {
    obj.test += 1
}

var a = MyFirstClass()
var b = MySecondClass()

inc(a)
print(a.test) // 1
inc(a)
print(a.test) // 2
inc(b)
print(b.test) // 1
inc(a)
print(a.test) // 3

重要提示:

我之前只制作了MyProtocol class,因为这样可以优化代码。

如果您想要任何类型(不仅仅是课程),您可以采用@Hamish solution(您可以在下面的评论中详细了解这一点)