Swift中能否将方法参数声明为协议而非具体类型?附示例
当然可以!Swift完全支持将方法参数声明为协议类型
这其实正是Swift协议的核心用途——让代码依赖抽象而非具体实现,完美契合你“方法无需关注参数具体类型,只要对象遵循协议即可”的需求。
咱们来拆解下你给出的示例代码:
- 你定义的
myProtocol协议明确了遵循它的类型必须具备data1(String类型,可读可写)和node(Int类型,可读可写)两个属性 myData类通过实现这两个属性,满足了协议要求,成为了协议的遵循者myClass里的myFunc方法把参数类型设为myProtocol,这就意味着:任何遵循该协议的类型实例,不管是现有的myData,还是以后你新增的其他类/结构体,都能传入这个方法。方法内部只需要使用协议定义好的接口,完全不用关心参数到底是哪个具体类型。
你可以试试这段验证代码,看看实际效果:
let myDataInstance = myData() print(myDataInstance.data1) // 初始值:"Boo" let myClassInstance = myClass() myClassInstance.myFunc(data: myDataInstance) print(myDataInstance.data1) // 修改后:"Hello"
另外补充个小细节:你代码里协议的属性是get set修饰的,所以方法里能直接修改data.data1;如果协议里属性只写了get(只读),那方法里就没办法修改这个属性啦。
内容的提问来源于stack exchange,提问作者Daniel Hall
相关产品推荐
相关产品推荐

