Swift中如何定义可访问类变量的协议方法
解决Swift协议中复用方法逻辑的问题
你可以通过协议扩展给Greet协议添加message方法的默认实现,这样遵守协议的类就不用重复编写相同的方法代码了。具体做法如下:
核心思路
Swift协议本身只能定义方法/属性的蓝图,但通过协议扩展可以提供默认实现。因为协议已经要求所有遵守者必须实现name属性,所以在扩展的方法里可以直接访问self.name来完成打印逻辑。
修改后的完整代码
protocol Greet { var name: String { get } func message() } // 给协议添加message方法的默认实现 extension Greet { func message() { print("Good Morning", self.name) } } class Employee: Greet { var name = "Perry" // 无需重复实现message方法,自动使用协议扩展的默认逻辑 } class Student: Greet { var name = "student abc" // 同样无需实现message方法 } var employee1 = Employee() employee1.message() // 输出:Good Morning Perry var student = Student() student.message() // 输出:Good Morning student abc
额外说明
如果后续某个类需要自定义message的逻辑,直接在类中重新实现该方法即可,自定义的实现会覆盖协议扩展的默认逻辑,比如:
class Teacher: Greet { var name = "Mr. Smith" func message() { print("Good Afternoon", name) // 自定义输出逻辑 } } var teacher = Teacher() teacher.message() // 输出:Good Afternoon Mr. Smith
内容的提问来源于stack exchange,提问作者jacobcan118
相关产品推荐
相关产品推荐

