快速从基类返回子类

2023-12-27

我试图允许超类中的方法返回子类的实例,以便我可以在父类和子类之间使用方法链接。

但是,当我尝试链接这些方法时,出现错误“BaseClass 没有名为 someOtherChainableMethod 的成员”。这是我的代码:

class BaseClass {
    func someChainableMethod() -> BaseClass {
        return self
    }
}

class ChildClass: BaseClass {
    func someOtherChainableMethod() -> ChildClass {
        return self
    }
}

let childClass = ChildClass

childClass.someChainableMethod().someOtherChainableMethoid()

问题似乎是父级可链接方法中的“返回自身”正在返回类型为的实例BaseClass而不是ChildClass.

我也尝试过使用泛型但失败了,这就是我尝试过的:

class BaseClass<T> {
    func someChainableMethod() -> T {
        return self
    }
}

class ChildClass: BaseClass<ChildClass> {
    func someOtherChainableMethod() -> ChildClass {
        return self
    }
}

let childClass = ChildClass

childClass.someChainableMethod().someOtherChainableMethoid()

在这种情况下,错误来自BaseClass someChainableMethod方法,是“BaseClass 不可转换为 T”。


如果将方法的返回类型更改为Self:

class BaseClass {
    func someChainableMethod() -> Self {
        return self
    }
}

class ChildClass: BaseClass {
    func someOtherChainableMethod() -> Self {
        return self
    }
}

let childClass = ChildClass()
let foo = childClass.someChainableMethod().someOtherChainableMethod()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速从基类返回子类 的相关文章

随机推荐

  • 使用 log4j 进行条件日志记录

    我正在开发的 Web 应用程序偶尔会为某些用户带来数据完整性问题 我想打开跟踪级别日志记录 但由于我们每秒处理 100 个请求 因此跟踪日志记录不可能实现每个请求 log4j 有没有办法能够有条件地记录 换句话说 我希望仅当特定用户发出请求
  • 不使用不等概率进行替换的采样——线性运行时间可能吗?

    在寻找一个更快的加权采样 无需替换 https stackoverflow com questions 15113650 faster weighted sampling without replacement 出现了以下问题 是否有一种算
  • 在 JQuery 中使用 Load() 获取 XML 属性

    我有这段代码 它可以工作 invest port thumb a mouseenter function slider name load this href cName 加载此 XML
  • Rails:成分的未定义方法“map”

    完全的 Rails 新手正在尝试入门 我有两个课程 成分和单位 有磅 加仑和几十三种单位 每种成分只有一个单位 我认为我正确设置了关联 路线 创建新成分时 我需要要求用户设置这三个单位 我用另一个问题来说明这一点 下拉框 用表单中另一个表的
  • 为什么这个 `grep -o` 失败,我应该如何解决它?

    给定输入 echo abc123def grep o 0 9 在一台计算机上 使用 GNU grep 2 5 4 这会返回123 而在另一个 使用 GNU grep 2 5 1 上它返回空字符串 是否有一些解释为什么 grep 2 5 1
  • 修改 post find mongoose hook 中的结果

    我正在尝试找到一种方法来修改猫鼬的查询结果 下面是带柱钩的独立模型 use strict load the things we need var mongoose require mongoose var invoice db mongoo
  • CoreData 实体使用合并策略保存/更新为 NSMergeByPropertyObjectTrumpMergePolicy 在 xcode 中引发编译器错误?

    我是 IOS 开发的新手 并且在使用 coredata 时遇到了麻烦 我创建了一个AppPage实体与pageId其中的属性标记为唯一约束 现在我可以插入一行AppPage使用下面的代码 let context getAppDelegate
  • 将字符串保留在请求 uri 前面

    我正在构建一个支持英语和丹麦语两种语言的 WordPress 网站 我想保留语言代码字符串en对于英语和da对于请求 uri 中前置的丹麦语 就像 目前这对我有用 http example com da 如果我访问帖子或页面 它应该是这样的
  • 使用 CMake 将命令行参数传递给 Visual Studio 以进行配置文件引导优化

    我在用着CMake for a C 项目 我正在尝试使用profile guided optimization https learn microsoft com en us cpp build reference profile guid
  • 检查当前节点版本

    我需要以编程方式访问我正在编写的库中运行的当前节点版本 在文档中似乎找不到这个 Look at 进程版本 http nodejs org docs v0 10 12 api process html process process vers
  • Excel VBA - 如何将多数组 JSON 中的数据获取到列中

    我找到了一个解析 JSON 的解决方案 它对于所提供的示例效果很好 这是代码 Sub Test Dim jsonText As String Dim jsonObj As Dictionary Dim jsonRows As Collect
  • 类型错误:无法读取未定义的属性“getPosts” - useQuery 挂钩,反应功能组件

    我确实尝试过寻找同样的问题 但所有这些问题要么是有角度的 要么是无关的 我正在尝试做一个使用 MongoDB Express React Node Graphql 和 Apollo 的社交应用程序 我正在关注 freecodecamp 的视
  • 如何在 Ruby 中声明二维数组

    我想要一个 Ruby 中的二维数组 我可以像这样访问它 if array x y 1 then array x y 0 问题是 我不知道数组维度的初始大小 并且我增加了数组 使用 lt lt 操作员 如何将其声明为实例变量 这样就不会出现这
  • 防止 UITabBar 将渐变应用于其图标图像

    当我为 UITabBar 制作图标时 它会对图像应用渐变 我需要知道如何防止它出现这种梯度 Apple 在 iOS 5 中添加了标签栏自定义功能 现在这种东西已经微不足道了 在此之前 这是一个巨大的黑客攻击 不推荐 以下是如何制作完全自定义
  • 将视图移动到新的超级视图而不闪烁

    作为动画的一部分 我有一个视图 我想更深入地进入视图层次结构 我之前将其移动到视图层次结构的顶部 以便执行出现在其他 UI 元素之上的动画 我正在使用这段代码 它执行了正确的操作 CGRect rect self profileImage
  • 调试基于 Linux 的 C++ 代码 Visual Studio Code 时出现问题

    我正在尝试调试我的代码视觉工作室代码在 Linux Ubuntu 中 我已经按照规范配置了调试配置 但是当尝试调试时 我收到以下错误 thread group added id i1 GNU gdb Ubuntu 7 11 1 0ubunt
  • Python 中的一切都是对象,为什么运算符不是?

    Python 中的一切都是对象 我们都知道这句话 所有 Python 爱好者 包括我 都喜欢它 在这方面 观察运营商很有趣 它们似乎不是物体 例如 gt gt gt type or lt returns SyntaxError invali
  • Linq 使用 GroupBy 时, Include 不起作用

    包括 matchparticipants 不起作用 当我调试时它总是说 Null 但是当我将 GroupBy 放在注释中时 它工作正常 我正在使用代码优先的实体框架 4 3 1 实体 public class Match ScaffoldC
  • new[],delete[]复杂性

    我已经知道new 运算符首先分配内存 然后为每个元素调用构造函数 并且delete 运算符首先为每个元素调用析构函数 然后释放内存 因此 它们的时间复杂度都是 O n 但是 如果我有一个类 我没有为其定义任何构造函数 析构函数 那么复杂度仍
  • 快速从基类返回子类

    我试图允许超类中的方法返回子类的实例 以便我可以在父类和子类之间使用方法链接 但是 当我尝试链接这些方法时 出现错误 BaseClass 没有名为 someOtherChainableMethod 的成员 这是我的代码 class Base