You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:15:29