首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >作为函数返回类型的Swift协议

作为函数返回类型的Swift协议
EN

Stack Overflow用户
提问于 2016-06-01 04:34:13
回答 1查看 10.9K关注 0票数 13

我希望使用泛型协议类型作为函数返回类型,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
protocol P {
  associatedtype T
  func get() -> T?
  func set(v: T)
}

class C<T>: P {
  private var v: T?
  func get() -> T? {
    return v
  }
  func set(v: T) {
    self.v = v
  }
}

class Factory {
  func createC<T>() -> P<T> {
    return C<T>()
  }
}

但是,这段代码编译时出现了一些错误:

  1. 不能专门化非泛型类型“P”
  2. 函数签名中不使用泛型参数'T‘

是否有任何方法来实现类似的功能与Swift?

EN

回答 1

Stack Overflow用户

发布于 2020-05-13 07:11:53

Swift 5.1支持使用不透明类型返回关联类型。使用不透明类型,代码生成成功。参考

代码语言:javascript
代码运行次数:0
运行
复制
protocol P {
    associatedtype T
    func get() -> T?
    func set(v: T)
}

class C<T>: P {
    private var v: T?

    func get() -> T? {
        return v
    }
    func set(v: T) {
        self.v = v
    }
}

class Factory {
    func createC<T>() -> some P {
        return C<T>()
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37559501

复制
相关文章

相似问题

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