在协议中声明的属性,其实是只包含属性名和数据类型的声明,不包含具体实现。因此,如果一个类想遵循该协议,那么就需要给协议中的属性添加具体的实现了。但是问题在于,如果该类中已经有了与该协议中属性同名的属性,那么就会出现重新声明属性的错误。 解决方法是使用property重命名,或重新定义与协议中重名的属性的getter和setter方法。下面是一个示例:
protocol SomeProtocol { var name: String { get set } }
class MyClass { var name: String = "Tom" }
//重新定义name属性的getter和setter方法 extension MyClass: SomeProtocol { var protocolName: String { get { return name } set { name = newValue } } }
//使用property重命名 class MyClass2 { var myName: String = "Tom" }
extension MyClass2: SomeProtocol { var name: String { get { return myName } set { myName = newValue } } }