首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只在符合协议时才能迅速扩展类

只在符合协议时才能迅速扩展类
EN

Stack Overflow用户
提问于 2015-09-08 00:16:46
回答 1查看 5.7K关注 0票数 12

是否有可能提供只向符合协议的类添加功能的扩展?我想要实现的功能如下:

代码语言:javascript
复制
protocol Identifiable {
  var id: String { get }
}

class Model {
  func report(data: String) {
    ...
  }
}

class Thing: Model, Identifiable {
  var id: String
  ...
}

class Place: Model, Identifiable {
  var id: String
  ...
}

extension (Model + Identifiable) {

  func identifiy() {
    report("\(self.id)")
  }

}

// Invalid: Model().identify()
Place().identify() // OK
Thing().identify() // OK

扩展协议本身是不可能的,因为扩展需要访问model上定义的方法。扩展模型失败,因为id只在子对象上定义。扩展Model: Identifiable失败是因为Model不符合协议Identifiable

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-08 00:29:40

您可以扩展Identifiable,只需指定SelfModelModel的子类

代码语言:javascript
复制
extension Identifiable where Self: Model {
    func identifiy() {
        report(id) 
        // `id` is already a `String` so there's 
        // no need to use String Interpolation.
    }
}
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32447502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档