我有两个使用相同协议实现的课程
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)
答案 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(您可以在下面的评论中详细了解这一点)